当前位置:  开发笔记 > 编程语言 > 正文

Java对象重用

如何解决《Java对象重用》经验,为你挑选了4个好方法。

Java对象是否应该重复使用,因为它可以重复使用?或者我们应该只在它们是"重量级"时重用它,即是否有与之相关的OS资源?

互联网上的所有旧文章都尽可能地谈论对象重用和对象池,但我已经阅读了最近的文章,这些文章说new Object()现在已经高度优化(10条指令),并且对象重用并不像以前那么大.

目前的最佳做法是什么?你们这样做的人是怎样的?



1> Esko..:

我让垃圾收集器为我做了那种决定,唯一一次我用新分配的对象达到堆限制是在运行一个错误的递归算法几秒后生成3*27*27 ...新对象尽可能快.

做可读性和封装的最佳选择.有时重用对象可能很有用,但通常你不必担心它.



2> OscarRyz..:

如果你非常密集地使用它们并且构造成本很高,你应该尽可能多地重复使用它们.

如果你的对象非常小,并且创建起来很便宜(比如Object)你应该创建新对象.

例如,连接数据库是合并的,因为创建新数据库的成本高于创建.. mmhh new Integer的成本.

所以回答你的问题是,再利用时,他们是沉重的经常使用(这是不值得的泳池,其只用两次3 MB的对象)

编辑:

此外,Effective Java:Favor Immutability中的这个项目值得一读,可能适用于您的情况.



3> Darron..:

让垃圾收集器完成它的工作,它可以被认为比你的代码更好.

除非剖析器证明它有罪.并且甚至不使用常识来试图弄清楚何时出错.在特殊情况下,甚至像字节数组这样的廉价对象也会更好地汇集.

优化规则1:不要这样做.

规则2(仅限专家):不要这样做.



4> 小智..:

对象创建很便宜,是的,但有时不够便宜.

如果你快速连续地创建了很多(我的意思是A LOT)临时对象,那么垃圾收集器的成本是相当可观的.然而,即使有一个好的分析器,你可能不一定容易看到成本,因为垃圾收集器现在在短时间内工作,而不是阻止整个应用程序一两秒.

我在项目中获得的大多数性能改进来自于通过积极的缓存来避免对象创建或避免整个工作(包括对象创建).无论对象有多大或多小,它仍然需要时间来创建它并管理它的引用和堆结构.(当然,清理和内部堆碎片整理/复制也需要时间.)

我不会开始虔诚地避免不惜一切代价创建对象,但是如果你在内存分析器中看到一个拼图模式,那就意味着你的垃圾收集器处于重负荷状态.如果您的垃圾收集器使用CPU,则CPI不适用于您的应用程序.

关于对象池:正确执行并且不会遇到内存泄漏或无效状态,或者在管理上花费的时间比保存时要困难.所以我从未使用过这种策略.

我的策略是简单地争取不可变对象.不可变的东西可以很容易地缓存,因此有助于保持系统简单.

但是,无论您做什么:确保首先使用分析器检查您的热点.过早优化是最邪恶的根源.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有