java - 在任务管理器和 Profiler 中监控 java 应用程序内存,哪个是正确的?
问题描述
我正在监视从 Netbeans 运行的应用程序的内存使用情况。我对两个不同的结果感到有些困惑。
任务管理器为我提供了一个值,而 Netbeans 中的 Profiler 显示了不同的值。
例如,这是应用程序内存使用量为 2,927.3 MB 的任务管理器屏幕截图
但是分析器显示了这一点(查看右上图): 总堆大小超过 3GB,但使用的堆看起来不到 2GB。
所以对我来说,探查器和任务管理器之间的值不匹配。
哪一个更准确地表示应用程序的内存使用情况?
解决方案
这是因为,至少据我所知,Java 进程消耗的内存是由两部分组成的。
Heap,这是每次代码执行语句时分配对象的段,例如 CExample Exam = new CExample();
Non-heap,这是您找到每个线程的堆栈和元数据类的部分,以前称为永久代,现在称为元空间。据我所知,非堆还包含由 Just In Time 编译器生成的本机代码,以提高应用程序的性能。
我认为您可以查看这些链接以获得有关堆和非堆段的更多见解。
https://betsol.com/java-memory-management-for-java-virtual-machine-jvm/
https://docs.oracle.com/javase/8/docs/api/java/lang/management/MemoryMXBean.html
推荐阅读
- java - 自动重启 Java 程序
- python - 无法创建函数,在 DataFrame 中添加新列
- regex - 在 Ansible 中使用 REGEX 查找字符串名称
- testng - TestNG 数据提供者优先级
- reactjs - React if 语句中的通配符匹配?
- android - 为什么当我增加宽度时,我的 RelativeLayout 没有延伸到左边的集合?xml
- java - 无法使用 Mockito 模拟呼叫
- selenium - 从 svg 交互式地图中获取链接
- javascript - 触发 Click 事件将 Retrun true 但不起作用
- loops - Jmeter:Jmeter 中的地图