Java JVM在gc期间抛出内存,尽管还有足够的内存

Java JVM在gc期间抛出内存,尽管还有足够的内存,java,jvm,garbage-collection,out-of-memory,Java,Jvm,Garbage Collection,Out Of Memory,我将java应用程序配置为使用5G内存。我突然记错了。我查看了gc日志,发现还剩下大量内存:年轻一代占用了4%的分配空间,任期一代占用了5%,永久一代占用了43%。我对JVM为什么在gc时抛出OutOfMemory感到困惑。有人知道为什么会这样吗?非常感谢你的帮助 JVM内存和gc设置: gc.log 另外,OutOfMemoryException的细节是什么?它与GC开销限制有关吗?如果是,则可以禁用该异常(-XX:-usegcoveredlimit) 查看此页关于好的,可能是一个愚蠢的答案,

我将java应用程序配置为使用5G内存。我突然记错了。我查看了gc日志,发现还剩下大量内存:年轻一代占用了4%的分配空间,任期一代占用了5%,永久一代占用了43%。我对JVM为什么在gc时抛出OutOfMemory感到困惑。有人知道为什么会这样吗?非常感谢你的帮助

JVM内存和gc设置: gc.log
另外,OutOfMemoryException的细节是什么?它与GC开销限制有关吗?如果是,则可以禁用该异常(-XX:-usegcoveredlimit)


查看此页关于

好的,可能是一个愚蠢的答案,但您的机箱至少有5GB的RAM,对吗?只是检查一下。:-)我不记得JVM是否真正检查您是否有足够的内存,直到它实际上试图分配它。

< P>您可能想考虑使用一个分析器和调试器来了解发生内存不足的错误的确切状态。 我使用Jprofiler进行分析,使用Eclipse的调试器进行调试。两者都有足够的功能


我还希望看到错误的堆栈跟踪,以确定错误的种类以及它从何处开始。这是问题中缺失的非常重要的信息

请您指定您在哪台机器上运行(Windows、Linux等)?您也在使用哪台JVM?假设它必须是64位JVM?异常的堆栈跟踪是什么?您是否有可能使用本机代码?请使用确切的堆栈跟踪进行编辑。所有这些。OutOfMemory异常有多种用途,并非所有用途都与堆内存有关。我敢打赌你在创建线程时遇到了问题。我已经试过了。它不起作用。我想根本原因是别的。
-server -Xms5g -Xmx5g -Xss256k -XX:NewSize=2g -XX:MaxNewSize=2g -XX:+UseParallelOldGC -XX:+UseTLAB -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:+DisableExplicitGC
2009-09-19T03:34:59.741+0000: 92836.778: [GC Desired survivor size 152567808 bytes, new threshold 1 (max 15) [PSYoungGen: 1941492K->144057K(1947072K)] 3138022K->1340830K(5092800K), 0.1947640 secs] [Times: user=0.61 sys=0.01, real=0.19 secs] 2009-09-19T03:35:29.918+0000: 92866.954: [GC Desired survivor size 152109056 bytes, new threshold 1 (max 15) [PSYoungGen: 1941625K->144049K(1948608K)] 3138398K->1341080K(5094336K), 0.1942000 secs] [Times: user=0.61 sys=0.01, real=0.20 secs] 2009-09-19T03:35:56.883+0000: 92893.920: [GC Desired survivor size 156565504 bytes, new threshold 1 (max 15) [PSYoungGen: 1567994K->115427K(1915072K)] 2765026K->1312820K(5060800K), 0.1586320 secs] [Times: user=0.50 sys=0.01, real=0.16 secs] 2009-09-19T03:35:57.042+0000: 92894.079: [GC Desired survivor size 179961856 bytes, new threshold 1 (max 15) [PSYoungGen: 115427K->0K(1898560K)] 1312820K->1313987K(5044288K), 0.0775650 secs] [Times: user=0.42 sys=0.19, real=0.08 secs] 2009-09-19T03:35:57.120+0000: 92894.157: [Full GC [PSYoungGen: 0K->0K(1898560K)] [ParOldGen: 1313987K->159522K(3145728K)] 1313987K->159522K(5044288K) [PSPermGen: 20025K->19942K(40256K)], 0.56923 00 secs] [Times: user=2.18 sys=0.05, real=0.57 secs] 2009-09-19T03:35:57.690+0000: 92894.726: [GC Desired survivor size 197066752 bytes, new threshold 1 (max 15) [PSYoungGen: 0K->0K(1745728K)] 159522K->159522K(4891456K), 0.0072590 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 2009-09-19T03:35:57.698+0000: 92894.734: [Full GC [PSYoungGen: 0K->0K(1745728K)] [ParOldGen: 159522K->158627K(3145728K)] 159522K->158627K(4891456K) [PSPermGen: 19942K->19934K(45504K)], 0.3280480 secs] [Times: user=1.46 sys=0.00, real=0.33 secs] Heap PSYoungGen total 1745728K, used 87233K [0x00002aab73650000, 0x00002aabf3650000, 0x00002aabf3650000) eden space 1745664K, 4% used [0x00002aab73650000,0x00002aab78b80778,0x00002aabddf10000) from space 64K, 0% used [0x00002aabddf10000,0x00002aabddf10000,0x00002aabddf20000) to space 192448K, 0% used [0x00002aabe7a60000,0x00002aabe7a60000,0x00002aabf3650000) ParOldGen total 3145728K, used 158627K [0x00002aaab3650000, 0x00002aab73650000, 0x00002aab73650000) object space 3145728K, 5% used [0x00002aaab3650000,0x00002aaabd138d28,0x00002aab73650000) PSPermGen total 45504K, used 19965K [0x00002aaaae250000, 0x00002aaab0ec0000, 0x00002aaab3650000) object space 45504K, 43% used [0x00002aaaae250000,0x00002aaaaf5cf668,0x00002aaab0ec0000)
$uname -a
Linux x 2.6.24-etchnhalf.1-amd64 #1 SMP Tue Oct 14 03:11:45 UTC 2008 x86_64 GNU/Linux 

$java -version
java version "1.6.0_10" 
Java(TM) SE Runtime Environment (build 1.6.0_10-b33) 
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode)