Java应用程序内存大小

时间:2011-12-27 10:10:40

标签: java eclipse memory intellij-idea

当IntelliJ或Eclipse正在运行时,我可以从底部的进度条看到它们在应用程序内部使用了多少堆...它总是指示一个512 MB的子值,它是启动时分配的最大大小。 现在在很多情况下,如果我从操作系统(Linux)看,它说该应用程序使用大约1300 MB,我理解库,堆栈,内存映射文件,...不在堆中...... 但为什么差异那么大呢?通常有大约1GB的差异......为什么?

谢谢。

2 个答案:

答案 0 :(得分:6)

JVM内存使用情况可以通过以下图像解释:

JVM Memory Usage

正如您所看到的,它不只是-Xmx。总进程内存还包括-XX:PermSize,所有线程的堆栈大小,JIT和其他内部使用的JVM内存。不要忘记也包含在进程内存中的内存映射文件。 IntelliJ IDEA将内存映射文件用于缓存,因此它可以添加几百兆字节。

如果您需要详细信息,请使用一些分析器,如JConsole或YourKit。

答案 1 :(得分:0)

值得记住的是,Java在启动时分配了最大堆大小,这显示在虚拟内存大小中。 (默认情况下,这与您拥有的内存量成比例)这可能比实际使用的主内存大得多。

我怀疑你正在看这个虚拟内存而不是常驻内存。

如果你在linux上使用pmap,你可以看到所有内存映射区域及其大小。

如果在Windows上使用打开的项目重新启动IntelliJ,它会使用35 MB的大约100 MB,最大使用494 M.在任务管理器中,它表示大小为173 MB私有,总共196 MB。