java - Java中的已用和空闲内存

标签 java performance memory memory-management memory-leaks

我正在努力提高我的网络应用程序的性能,所以我决定对其进行分析。
执行此操作时,我注意到在启动任务管理器时完成了一个漫长的过程后,我看到 java.exe 占用了太多内存。

顺便说一句,我在进程完成且 cpu 处于稳定状态后 2-3 小时后检查了它。
我在探查器的 VM 基本 View 中看到,已用内存为 5 GB,可用内存为 15 GB,在任务管理器中,java.exe 使用的总内存为 41 GB.
这是什么空闲内存?
是不是像现在这么多内存会被java占用?
我注意到随着进程开始和运行,使用的内存和空闲内存都在增长,但完成后使用的内存减少但没有空闲内存。
请问是我的申请有问题还是正常?

最佳答案

分析器通常会显示堆内存使用情况。因此,可能正在使用 5 GB 的堆,还有 15 GB 可用。任务管理器显示进程使用的总内存,其中包括堆内存和非堆内存,例如 Sun JVM 中的“Perm Gen”内存。 以下帖子提供了很好的资源集合,可以详细了解这一点。

Java Memory explained (SUN JVM)

关于java - Java中的已用和空闲内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9630192/

相关文章:

java - 当测试运行时并行观察是否存在特定元素

ruby-on-rails - Rails3 - 为什么我的 View 加载时间这么长?

第一次循环迭代后将字符串更改为 NULL。内存分配

c - 错误: section attribute not allowed when used in macro

java - 使用 Android 实现 Bouncy CaSTLe 密码算法

java - Ibatis queryWithRowHandler() 似乎仍然获取所有行

performance - 为什么 SAPUI5 多次加载类似的片段?

c# - String 和 Char 类型如何存储在 .NET 的内存中?

java - 对于带有 JAXB 注释的类,是否有类似 PostConstruct 的东西?

.net - 为什么从表达式动态生成的委托(delegate)比硬编码的 lambda 慢?