Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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
Java JVM没有释放虚拟内存_Java_Garbage Collection_Jvm - Fatal编程技术网

Java JVM没有释放虚拟内存

Java JVM没有释放虚拟内存,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,我的web应用程序正在抛出错误。它有25GB的内存。应用程序已加载测试,我们看到内存正在增加。但是我希望JVM在完全gc后释放内存。为什么JVM即使在应用程序使用之后也不释放虚拟内存呢 以下是JVM设置: 以下是“top”命令输出: top-02:09:42最多117天,5:24,4个用户,平均负载:0.00,0.01,0.05 任务:共140项,1项运行,139项睡眠,0项停止,0项僵尸 Cpu:0.0%us、0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0%s

我的web应用程序正在抛出错误。它有25GB的内存。应用程序已加载测试,我们看到内存正在增加。但是我希望JVM在完全gc后释放内存。为什么JVM即使在应用程序使用之后也不释放虚拟内存呢

以下是JVM设置:

以下是“top”命令输出: top-02:09:42最多117天,5:24,4个用户,平均负载:0.00,0.01,0.05 任务:共140项,1项运行,139项睡眠,0项停止,0项僵尸 Cpu:0.0%us、0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st 内存:总计62167808k,使用60854992k,空闲1312816k,缓冲73444k 交换:总计0千,使用0千,免费0千,缓存17789504k PID用户PR NI VIRT RES SHR S%CPU%MEM TIME+命令 17206 java 20 0 55.1g 40g 12m S 0.3 68.2 298:41.08 java

以下是“自由”命令输出: 缓存的可用共享缓冲区总数 成员:62167808 60855448 1312360 73592 17789532 -/+缓冲区/缓存:42992324 19175484 掉期:0


请欣赏修复此问题的任何线索。

并非HotSpot JVM中的所有垃圾收集算法都会在GC后向操作系统释放虚拟内存

有两种算法可以做到这一点:

  • 串行
    -XX:+UseSerialGC
  • G1
    -XX:+UseG1GC
您正在使用CMS
-XX:+UseConMarkSweepGC
,它从不向操作系统释放内存


你可以找到热点中所有GC算法的快速摘要。

你是否考虑过剖析你的应用程序来检查它是否有内存泄漏?去运行这个- JVisualVM是你的朋友。抓取应用程序的堆转储,然后进行分析,看看是什么消耗了所有的空间-有一些您没有考虑的引用。您也可以尝试。java应用程序的最佳实践是使用-Xms=-Xmx,以便从一开始就占用所有内存。考虑你的应用程序运行15G,-XMX= 30G,然后有人启动一个应用程序,你的JVM将无法获得更多的内存…当然,当使用-XX:+useConMarkSweepGC时,是否有任何方法可以从JVM中找到可用内存。G1与CMS相比是否有效?JMX有大量关于内存的信息,请查看java的usage属性。lang:type=MemoryPool,name=*GC是CPU和浪费内存之间的权衡。即使G1可以释放内存,它也可能决定为您节省一些CPU周期,并且在达到25Gib阈值之前不收集旧垃圾。
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/logs/gcc.log 
-XX:MaxPermSize=96m -XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode -XX:+UseCompressedOops -XX:+UseCompressedStrings
-Xmx30g
top - 02:09:42 up 117 days, 5:24, 4 users, load average: 0.00, 0.01, 0.05 Tasks: 140 total, 1 running, 139 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 62167808k total, 60854992k used, 1312816k free, 73444k buffers Swap: 0k total, 0k used, 0k free, 17789504k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 17206 java 20 0 55.1g 40g 12m S 0.3 68.2 298:41.08 java total used free shared buffers cached Mem: 62167808 60855448 1312360 0 73592 17789532 -/+ buffers/cache: 42992324 19175484 Swap: 0 0 0