java - JIT 能够优化内存分配吗?

标签 java garbage-collection profiling jit visualvm

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

enter image description here

最佳答案

在一些非常特殊的情况下,JIT 可以删除分配,从而减少 GC 的压力。主要有escape analysis 。基本上,如果对象仅存在于一种方法中并且从不离开它,则可以将其分配在堆栈而不是堆上,从而减少垃圾收集器的工作。 如果您想确定:您可以禁用逃逸分析:使用命令行参数 -XX:-DoEscapeAnalysis 并查看图形是否发生变化。

然而,还存在许多其他自调整机制。就像运行时系统注意到您不需要那么多内存一样,因此开始减少堆大小。你的图表将与此匹配。由于大部分内存始终可以被释放,内存系统减少了堆大小:GC 更频繁但更小。

关于java - JIT 能够优化内存分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559804/

相关文章:

java - 在设计系统的其他部分之前开发原型(prototype) GUI 是否明智?

c# - GC.GetTotalMemory的使用及其返回值

java - 弱引用和 `OutOfMemoryError` s

Java 应用程序分析

caching - 如何确保代码运行时不会因缓存而导致执行时间发生变化?

Java数组栈实现字符串转换和增长

java - Wildfly - 如何启用事务以启用延迟加载

java - 使用drawString显示文本的问题

java - 从 Java5 迁移到 6 后 GC 行为的变化

c++ - C++ 中的内存分配分析