Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows任务管理器javaw.exe内存与Java任务控制_Java_Memory_Garbage Collection - Fatal编程技术网

Windows任务管理器javaw.exe内存与Java任务控制

Windows任务管理器javaw.exe内存与Java任务控制,java,memory,garbage-collection,Java,Memory,Garbage Collection,我正在用我的Windows7机器帮助开发一个java应用程序,它有Java8更新45。我注意到Windows任务管理器所说的应用程序正在使用的内存量(通过javaw.exe映像)与Eclipse内存分析器/Java任务控制报告的内存量有很大的不同 示例:Java任务控制报告使用了150 MB的Java堆内存,而Windows报告使用了303 MB的工作集用于javaw.exe。我知道JVM本身、GC等可能会有一些开销 但我也看到它在做GC。在点击一下使内存增长后,JMC显示GC已经执行,并显示使

我正在用我的Windows7机器帮助开发一个java应用程序,它有Java8更新45。我注意到Windows任务管理器所说的应用程序正在使用的内存量(通过javaw.exe映像)与Eclipse内存分析器/Java任务控制报告的内存量有很大的不同

示例:Java任务控制报告使用了150 MB的Java堆内存,而Windows报告使用了303 MB的工作集用于javaw.exe。我知道JVM本身、GC等可能会有一些开销


但我也看到它在做GC。在点击一下使内存增长后,JMC显示GC已经执行,并显示使用了200 MB的堆。Windows报告为619 MB(从未关闭)。Windows是否正确显示Java的内存使用情况?应用程序中的某些东西导致了这种情况?

当JVM启动时,它会为堆分配一个连续的内存区域。该内存可以惰性地转换为实际内存,但几乎永远不会传回操作系统

堆只是JVM使用的内存的一个区域。这对您来说可能是最重要的,但当堆非常小时,与JVM使用的其他区域相比,它可能会很小。这包括

  • 本机内存,例如直接字节缓冲区
  • GUI本机组件
  • 共享库
  • jar文件
  • 元空间(或perm-gen)
  • 线程堆栈内存
Windows是否正确显示Java的内存使用情况

Windows显示所有使用的内存,而不仅仅是堆使用的部分

应用程序中的某些内容导致了这种情况


Windows不知道您使用的最大堆大小有多少。

如何防止应用程序占用所有Windows内存?有没有办法将其传回操作系统?@user1795832您需要为应用程序提供您希望它使用的内存量,并让它自己管理内存。设置最大堆不是设置最大内存,而是为JVM所做的其他事情设置几百MB的内存通常不是一个问题(除非您有一个小设备),您给应用程序提供我希望它使用的内存量是什么意思?它可以通过Xmx使用多少堆,然后让它继续使用?@user1795832您必须考虑到-Xmx只控制内存的一部分,如果您试图降低内存使用率,则控制总内存的一小部分。如果你有一个更大的堆,比如64GB,那么堆可能是你唯一需要担心的事情。我已经尝试了所有这些,当jconsole说有很多堆可供jvm使用时,Windows进程显示它一直在占用更多内存。我将最大容量设置为512MB,一旦达到大约450 MB,它就会进行垃圾收集,堆就会像预期的那样下降。但是Windows java进程没有停止。每当我点击应用程序使其使用堆中的内存时,它就会使用堆,但Windows进程会继续上升。