cab*_*bot 3 java memory heap allocation
我正在尝试快速编写一些东西,并且不断地分配和释放内存,这使得内存在性能方面的分配非常重要.
分配对象是否总是将它们分配给堆?JIT编译是否可以进行任何类型的奇特分配优化?
分配的对象new放在堆上,但JIT/JVM 可能会使用转义分析优化它们以进行堆叠.在IBM developerWorks上发表的这篇文章中阅读更多相关内容:
虚拟机可以使用一种称为逃逸分析的技术,通过该技术,他们可以判断某些对象在其整个生命周期内仍然局限于单个线程,并且该生命周期受给定堆栈帧的生命周期的限制.可以在堆栈而不是堆上安全地分配这些对象.
您无法直接控制堆栈分配,就像无法预测何时运行GC一样.如果你真的需要对内存机制进行如此深入的控制,那么唯一的方法就是使用C/C++.
无论如何,在过度复杂你的软件之前要三思而后行.我上面链接的论文的结论非常清楚内存管理:
JVM非常擅长弄清楚我们曾经认为只有开发人员可以知道的东西.通过让JVM根据具体情况在堆栈分配和堆分配之间进行选择,我们可以获得堆栈分配的性能优势,而不会让程序员痛苦地决定是在堆栈上还是在堆上进行分配.
这并不意味着您永远不需要对内存进行细粒度控制,但在大多数情况下,JVM可以比普通程序员更好地进行优化.
| 归档时间: |
|
| 查看次数: |
1037 次 |
| 最近记录: |