JIT是否能够优化内存分配?

时间:2016-01-01 20:33:44

标签: java garbage-collection profiling jit visualvm

这是来自visualvm的GC图,用于通过websocket监听一些传入数据流的简单应用程序......在开始时它会产生大量垃圾,但正如你所看到的那样随着时间的推移会变得更好......这是JIT以某种方式弄清楚如何避免创建对象?

enter image description here

1 个答案:

答案 0 :(得分:3)

有一些非常具体的案例,JIT可以删除分配,从而减轻GC的压力。主要是escape analysis。基本上,如果对象仅使用一个方法并且永远不会离开它,则可以在堆栈而不是堆上分配它,从而减少垃圾收集器的工作。 如果您想确切知道:您可以禁用转义分析:使用命令行参数-XX:-DoEscapeAnalysis并查看图表是否更改。

然而,存在许多其他自我调整机制。就像运行时系统注意到你不需要那么多内存,因此开始减少堆大小。您的图表将与之匹配。由于大多数内存总是可以释放,因此内存系统会减小堆大小:使用更频繁但更小的GC。