首页
学习
活动
专区
圈层
工具
发布

提高java程序性能的小方法

对于整个应用只需要存在一个实例的类,我们可以使用单例模式。对于工具类可以使用静态方法的方式访问。 用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。...但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。...StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候,因为没有设置初始化字符长度,StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是...如果你使用缺省值,初始化之后接着往里面追 加字符,在你追加到第16个字符的时候它会将容量增加到34(216+2),当追加到34个字符的时候就会将容量增加到 70(2*34+2)。...当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。

1K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    苏妈发布5nm新旗舰7900XTX,光追提升50%

    实际上,按照FP32核心数量对比,7900 XTX的理论纸面算力是6950XT的2.6倍,但考虑到实际代码执行效率和理论上的差距,这个优势会大幅缩水。...不开光追能和3090打的有来有回的6950XT,开了光追,马上连3070都打不过了。要不说老黄的卡敢卖这么贵,那不是没有道理的。 这回怎么样?...虽然着色器数量(12288)低于英伟达4090(16384),但7900XTX的GPU着色器数量从上一代的5120激增至12288,翻了一倍多;CU总数从80增加到96个,纸面算力相比上一代更是提高了2.6...虽然AMD的光追说是这代提升了,但老黄也不是原地踏步。如果都开光追的话,7000系想要「迎头赶上」估计不大可能。 网友锐评:苏妈良心价,逼老黄腰斩? AMD新品已发布,各大论坛评论区变炸开了锅。...不过现在,人们似乎有了更好的选择。微博博主「三三聊科技」称,苏妈发布的显卡物美价廉,价格不到4090的一半,这不是逼着老黄「腰斩」吗?

    1.2K40

    腾讯云数据万象CI助力企业解决图片处理需求!

    企业将数据上传至“对象存储COS”,确保数据的高可用高可靠,随时随地管理,并使用本文的主人公“数据万象CI”解决了各式各样的图片处理需求。...每天上传大量商品图片,需要对图片进行统一的缩放、裁剪等大批量操作,怎么解决? 总有人在我们平台发布黄色、政治类的图片,单靠人工审核太慢,怎么解决?...版权保护(盲水印),将水印以不可见形式添加到图片上,在图片被盗用后鉴权追责。 内容审核,涉黄、涉政、涉恐等多种类型的敏感内容审核服务,有效识别违禁信息,规避违规风险。 ...6.jpg 场景四:版权保护 通过该功能,您可将水印图或者文字以不可见的形式添加到原图信息中,在图片被盗取后,您可对疑似被盗取的资源进行盲水印提取,验证图片归属。...资源防泄露 对于内部分享的图片资源,您可通过文字盲水印将访问方的信息在请求图片时添加至图片中,当资源泄露后可通过流传出的资源图提取出盲水印,进而得到泄露方信息。 水印效果: 1.

    4.3K00

    一文带你读懂企业常用异步编程核心工具类CompletableFuture

    2024-11-19 [CompletableFuture 是 Java 8 引入的一个类,用于支持异步编程和构建复杂的异步任务流水线。...非 null:若为普通对象,表示任务正常完成的结果值;若为 AltResult 实例,则表示任务因异常终止(内部封装了 Throwable) stack:一个用链表实现的栈,管理当前 CompletableFuture...这是因为CompletableFuture同时支持多个同级别的后续任务,那么此时的结构图就变为了: 让我们从源码角度看一看这个调用链,当我们使用thenApply的时候: 继续追: 这段代码的逻辑为:先检查传递过来的...那我们就需要把当前这个function通过unipush添加到调用链中,所以让我们继续看unipush方法: final void unipush(Completion c) { if (c...我们来逐行解析一下allof方法: cfs:待合并的completablefuture数组。 lo和hi:这个数组的左右区间,也可以理解为是待递归处理的数组区间。’

    44510

    Java多线程与并发-原理

    同对象,同步代码块 对比 非静态同步方法 ? 不同对象,同步代码块 对比 非静态同步方法 ? 获取类锁 类锁通过对象锁实现的 ? 和对象锁的变动-代码块和静态方法 ? ?...同对象,类锁 对比 对象锁 因为类锁是对象锁实现的 同对象,传入了同种对象实例 ? 不同对象,类锁 对比 对象锁 互不干扰,因为锁两个对象锁 ? 同对象,类锁 对比 对象锁 ?...StringBuffer虽然是线程安全的,但操作本地变量(不是共享的)JVM消除内部锁,避免资源浪费 ? ? 锁粗化 ? ?...追源码 ArrayBlockingQueue 数组实现、线程安全的(ReentrantLock互斥锁保护资源)、有界的(数组长度)、阻塞队列 ArrayBlockingQueue与Condition...线程池的工作线程,被抽象为静态内部类worker,TreadPool实际上维护的就是一组worker对象 ? ? ? worker追源码,分析组成 ?

    86110

    真的有能开光追的手游了!自带实机演示的那种,OPPO这次玩“大”了

    杨净 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 手机上能玩到光追游戏了! 桥豆麻袋,你确定吗?...众所周知,光追渲染效果非常溜,哪怕镜面反射、水面倒影以及阳光阴影都非常真实~ 但算力要求巨大,PC端搞了这么多年,也未见有大规模扩张的起色,移动端确定可以??真的不是PPT??...这波游戏光追的“火热之风”,自然也吹到了移动端上。2020年,随着Vulkan正式支持光线追踪API,移动端厂商也坐不住了。 BUT,移动端光追,并不是想落地就能落地的。...将光追落地到移动端,是认真的吗? 更实际的落地方案:混合渲染 事实上,这些年还真有不少厂商想过要将光追落地到移动端。...ColorOS是OPPO基于安卓开发的手机操作系统,也是OPPO自研技术的“集大成者”。 实际上,移动端光线追踪技术也仅是ODC21开发者大会中,ColorOS发布的“黑科技”之一。

    69220

    超实用!这 6 个小程序,你生活中一定用得上

    小程序体验师:陈丹阳 生活中的各种小事,经常容易忘记。把它们都记在备忘录,又不易查找。 年纪轻轻就开始老忘事,这种感觉,真的不是很好。...「倒数记日」小程序使用链接 https://minapp.com/miniapp/2479/ 点点记账:简单的记账工具 相比其他记账类小程序,「点点记账」是一款简单但实用的记账工具。 ?...「月记 Lite」是「薄荷」app 推出的一款月经记录小程序。 本着记录类小程序所需的简洁,你只需要在「姨妈」到来当天,点击「姨妈来了?」按钮就可以了。当然,当天忘了记录也没关系,可以选择之前的日子。...这款小程序好就好在依托了丰富强大的「豆瓣」平台,综艺、电影、电视剧非常齐全,让你可以随时添加到追剧列表中。 ?...今天怎么又要加油了」,作为有车一族的你是不是经常这样想。 这款小程序,助你轻松记录「加油」时间。 ?

    1.1K20

    【小陈背八股-C++】Day04-大厂面试直击:Vector扩容机制,你真的懂STL容器吗?

    无论你是渴望通过大厂面试的技术追梦人,还是致力于优化千万级代码的性能极客,这里都有你意想不到的硬核干货。 1....详细回答 STL容器可以分为三大类: 序列容器:维护元素的线性序列 vector(动态数组,支持快速随机访问) deque(双端队列,两端高效插入和删除) forward_list(单向链表,任意位置高效插入和删除...对比传统数组的优势 支持STL算法、迭代器 类型安全、避免退化成指针 3. 描述一下vector是如何保证数组连续存储的吗?...vector内部使用动态数组作为底层存储结构,内部使用了一个单一的内存块来存储所有的元素,并且管理这个内存块的大小和容量。...vector内部实现过了一个内存分配函数,内存不够时会申请一块原内存1.5~2倍大小的新内存块,再把旧的数组复制到新的内存当中。

    22910

    JetPack Compose主题配色太少怎么办,来设计自己的颜色系统吧

    compose 中,对于数据的改变监听是使用 MutableState ,那么我自己自定义一个单例持有类,持有现有的主题配置,然后定义一个业务颜色类,并且定义相应的主题颜色类对象,最终根据当前单例的主题配置...,所有颜色都需要添加到其中,并使用相应的子类覆盖颜色。...CkColors 这个类上增加了 @Stable ,其代表着对于 Compose 而言,这个类是一个稳定的类,即每次更改不会引发重组,内部的颜色字段使用了 mustbaleStateOf 包装,以便当颜色更改时触发重组...这个问题还会存在吗,只需要写入一个新的颜色配置即可,这个逻辑结束后再重新写入当前主题配置即可,还会存在复杂的逻辑缠绕情况吗?...} 我们知道获取数据的时候使用的 current ,那么直接追这里即可。

    1.9K20

    redis 存储结构原理 2

    ,总是会比 size 小 1 ,我们可以来演示一下 使用取余的方式,实际上是很低效的,咱们的计算机是不会做乘除法的,同样都是用加减法来进行处理的,为了高效处理,我们可以使用二进制的方式 使用二进制的方式...= -1 时,说明正在进行再 hash 还记得我们之前说到 redis 有 16 个 db 吗?...到 ht[1] 中 可以追一下代码流程 , 我们从 src\server.c 注册 setCommand 命令开始追起,代码设计关键流程如下 当追到 dictAddRaw 函数的时候,我们可以清晰的看出来...,当 redis 加入数据的时候,使用的是头插法 先对新的节点开辟相应的内存 将新建节点的 next 对象指向链表的头 然后将链表的头指向新建的节点地址,即完成了一次 头插 此处我们可以看到,实际上是做了一次...sizemask 进行一次按位与操作 , 旨在得到一个新的 hash 表索引位置 redis 调用 _dictRehashStep 的位置 通过查看代码中调用 _dictRehashStep 函数的位置并不多

    29710

    普通函数与箭头函数

    的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象。...箭头函数比较特殊没有调用者,不存在this.箭头函数()的概念,但是它内部可以有this,而内部的this由上下文决定 例子1: var o = { user:"追梦子", fn:function...(){ console.log(this.user); //追梦子 } } o.fn(); 这里的this指向的是对象o,因为你调用这个fn是通过o.fn()执行的,那自然指向就是对象...window,this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的。...首先new关键字会创建一个空的对象,然后会自动调用一个函数apply方法,将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。

    1.3K40

    用C++跟你聊聊“代理模式”

    帮兄弟追小姑娘的故事 弄这个模式的时候啊,这心里多多少少还是有点蓝瘦。以前不懂事儿,看上哪个姑娘,自己还不敢说,总是让身边的朋友来“代理”。 反正最后也没成。 那这么个“代理”是怎么回事呢?...如何当好一名出色的“代理” 首先,一名合格的代理,要原滋原味的转述业主的需求,这个简单,直接调用业主的类方法就好了。 其次,一名优秀的代理,要保护好业主的个人信息,保证目标对象不发现这个业主。...如果有看过这篇:依赖倒转原则,那我们就来看看类图: ?...,这样可以隐藏一个对象存在于不同地址空间的事实。...②虚拟代理:根据需要创建开销很大的对象,通过它来存放初始化时间很长的真实对象。 ③安全代理:用于控制真实对象访问时的权限。 ④智能指引:调用真实对象时,代理处理另外一些事情。

    57410

    JavaScript 工厂函数 vs 构造函数

    工厂函数 所谓工厂函数,就是指这些内建函数都是类对象,当你调用他们时,实际上是创建了一个类实例”。意思就是当我调用这个函数,实际上是先利用类创建了一个对象,然后返回这个对象。...由于 Javascript 本身不是严格的面向对象的语言(不包含类),实际上来说,Javascript 并没有严格的“工厂函数”,但是在 Javascript中,我们能利用函数模拟类。...它像工厂一样,“生产”出来的函数都是“标准件”(拥有同样的属性) 构造函数 不同于其它的主流编程语言,JavaScript的构造函数并不是作为类的一个特定方法存在的;当任意一个普通函数用于创建一类对象时...正如上面所说的,我们可以使用 new 来类或者对象,那么你可能会有以下几个问题: 我们可以在工厂函数中使用 new 关键字吗?...理解 JavaScript 的原型 理解原型之前,需要记住以下几点知识: 所有的引用类型(数组、对象、函数),都具有对象特性,即可自由扩展属性(null除外) 所有的引用类型(数组、对象、函数),都有一个

    1.4K20

    一周技术学习笔记(第60期)-软件模块不同的修改原因和频率是怎么发生的

    我们已经知道面向对象的目的是为了模块化。 这点请毋庸置疑,如果还不理解就想想过程编程,满眼的方法,以及方法调用,作为程序员的人看了,会疯掉。 TIP:高内聚、低耦合是模块化的状态。...TIP:每个模块只做一件事,只是面向底层实现细节的设计原则,并不是SRP的全部。 进而,SRP有了更进一步的描述:任何一个模块都应该有且仅有一个被修改的原因。...到了这层描述的时候,SRP实际上已经是很“到位”了。在以往的过程中我们也经常拿这个描述来指导我们服务单一职责的设计。 要是,再往下,再往深,追一追呢。...如果,你的软件模块对两类以上的行为者负责了,会怎么样呢。 TIP:记住软件模块,宏观上可以是服务,微观上可以是一个代码类、代码片段。...是程序员最大的自由。 编程世界最美好的样子,莫过于,程序员对着产品经理喊:我有代码,你有需求吗。 ----END----

    33720

    300 行代码,我从零手写了一个 Agent,抓住本质

    更加复杂点的检索内容注意,检索内容,他会调用 rg 工具,如果你要复刻我实现,你需要brew install ripgrep ,这个工具搜索文件内容不错,比 grep 更好用,感觉就是为了追这波 agent...},  // AI 能回答"小明",因为历史都在这个数组里]每次调用 API,把这个数组全部发过去。AI 就"记住"了。当然,这会越来越长,token 越来越贵。...工具调用不是魔法。就是把能力用 JSON 描述清楚,AI 就会用。3. 记忆不是魔法。就是把历史消息发给 AI。4. 框架的价值在于抽象,但抽象也是成本。当你不理解底层,抽象就是黑盒。...用最原始的 API 调用,写一个能对话的程序。加上记忆。就是一个数组,把历史消息存起来。加一个工具。比如获取当前时间。体验一下 AI 是怎么"决定"调用工具的。加上循环。...追不完的。但如果你能抓住不变的本质,新工具出来的时候,你会发现:哦,这不就是那个东西换了个壳吗。这就是我手写 Agent 的原因。不是为了重复造轮子,而是为了知道轮子长什么样。需要源码?

    31610

    UE4的智能指针 UObject相关

    但不管内部是否连续,对于外部用户来说,我们就把他当作一个大数组好了。我们知道数组是使用下标来访问元素的,因此我们只要知道了某个对象在这个UObjectArray数组的下标,我们就可以拿到这个对象。...你可能会说UObject析构的时候,就把自己从数组上删除了,当再创建新的UObject时,原来删除的空位是可能被重新分配的,这样原来的下标就会指向一个新的UObject,而如果业务一直保存着原来的下标不就取错了对象吗...实际上也确实如此,所以这个大数组存的并不是UObject本身,而是FUObjectItem,在这个结构里,除了UObject的指针意外,还有存另外一个字段,SerialNumber。...可以看到,基类里出现了一个GGCObjectReferencer,而且是静态的UObject,这个对象在一个静态初始化函数中创建出来,并且加到了Root上,就像C#或Java语言一样,只要标为了Root...可以看到UGCObjectReferencer内,保存了一个FGCObject*的数组,其中AddObject和RemoveObject的实现就是把参数传入的FGCObject加到这个数组上和从这个数组上删除

    4.1K30

    Flutter 绘制探索 3 | 深入分析 CustomPainter 类 | 七日打卡

    Flutter 中所有可以看得到的组件,比如 Text、Image、Switch、Slider 等等,追其根源都是画出来的,但通过查看源码可以发现,Flutter 中绝大多数组件并不是使用 CustomPaint...来到 RenderCustomPaint 类中的 _paintWithPainter 方法内,ShapePainter.paint 被调用的那一行,这就是 debug 的强大之处。 ?...我们可以通过栈帧看到当前方法所处的位置;另外,任何方法调用时,都是一个对象在调用,这个对象便是 this,当我们迷路时,this 会成为指路明灯。通过下面计数器的图标,可以输入表达式和查看对象信息。...RenderView 是在 Flutter 框架内部初始化的RenderObject, 它永远都是渲染树的根节点。 ? PipelineOwner 类中在允许绘制之前还有几个条件,1...._layer 添加到 _containerLayer 中,这样可以避免渲染对象的绘制。

    2.2K11

    由浅入深,聊聊 LeakCanary 的那些事

    简单理解就是 用于监听我们的对象是否将要立刻变为弱可达,其本身只是一个接口,具体实现类为 ObjectWatcher ,也即我们上述初始化插件时传递的对象。...这里可能不是很好理解,关于具体的逻辑,我们下面还会再进行解释,暂时先有个印象即可。 ‍️...我们直接去看其源码即可:图片上述源码主要做了一些初始化的工作,具体的内容,我们在源码中增加了注释,具体不必过于深追。...,从而当这个View添加到窗口时,从Handler中移除该回调;在窗口移除时再添加到Handler中,从而触发view对象的可达性追踪。...图片上述逻辑如下,我们分为三步来看:内部会先调用 objectWatcher.retainedObjectCount 获得当前已经泄漏的对象个数;图片如果你还记得我们上面 延迟 5s 再去检测对象是否泄漏的

    71040
    领券