我知道JVM存在固有的开销,我想进一步研究以确切了解开销的来源.
使用YourKit探查器,我发现有巨大的int []充满了看似随机的信息.我的猜测是,这些存储了JVM用于优化应用程序的一些性能指标和其他内容; 但令我惊讶的是,所有元素都是有价值的0.
为了得到我的结果,我使用了以下"无所事事"程序,因此结果只包括JVM上发生的事情.
public final class Main {
public static void main(String[] args) throws InterruptedException {
Thread.sleep(Long.MAX_VALUE);
}
}
Run Code Online (Sandbox Code Playgroud)
这是分析结果的屏幕截图,如有必要,我可以上传内存快照.
Jon*_*oin -1
我一直在研究这个问题,它肯定与堆大小有关。例如,如果我设置 -Xmx5m -Xmx5m,则 int 数组分配消失。而如果我设置 -Xmx5g -Xms5g 它会创建更大的数组。
我想知道他们用它们做什么。
从 /r/java 获得帮助。
“最有可能的是,这些是线程本地分配缓冲区中的填充对象,有助于堆可解析性:https://shipilev.net/jvm-anatomy-park/5-tlabs-and-heap-parsability/ 它们应该是无法访问的,并通过解析堆转储的工具进行过滤。在您的屏幕截图中,分析器显示“所有对象(可访问和不可访问)”。
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |