我正在使用我的Windows 7计算机开发一个Java应用程序,该计算机具有Java 8 Update 45.我注意到Windows任务管理器所说的应用程序使用的内存(通过javaw)存在很大差异。 exe Image),以及Eclipse Memory Analyzer / Java Mission Control报告的内容。
示例:Java Mission Control报告使用了150 MB的Java堆内存,而Windows表示用于javaw.exe的303 MB的工作集。我知道JVM本身,GC等可能有一些开销。
但我也看到它在做GC。在点击一下以使内存增长之后,JMC显示GC已执行并说使用了200 MB的堆。 Windows报告619 MB(它从未下降)。 Windows是否正确显示Java的内存使用情况?应用程序的某些东西会导致这种情况发生吗?
答案 0 :(得分:4)
当JVM启动时,它会为堆分配一个连续的内存区域。这个内存可以懒惰地转换成实内存,但几乎不会被传递回操作系统。
堆只是JVM使用的一个内存区域。它可能对您来说最重要,但是当您的堆非常小时,与JVM使用的其他区域相比,它可能很小。这包括
Windows是否正常显示Java的内存使用情况?
Windows显示所有使用的内存,而不仅仅是堆使用的部分。
应用程序的某些内容会导致这种情况发生吗?
Windows不知道您使用的最大堆大小有多少。