我正在调整G1GC以避免发生FullGC。 通过遵循这些提示http://www.infoq.com/articles/tuning-tips-G1-GC,我没有看到任何类似“空间耗尽”的日志。
for (int i = 0; line != null; i++) {
line = dataReader.readLine();
if (line != null)
{
//line has 13 Strings to split
String[] temp = line.split(",");
//convert to list in order to add strings
ArrayList<String> templist = (ArrayList<String>) Arrays.asList(temp);
temp=null;
//add strings to your array by using templist.add(the_string);
temp = new String[templist.size()];
temp = templist.toArray(temp);
templist=null;
dataArrayList.add(temp);
}
}
由于其他原因GC会决定进行全面收集吗? 或者它仍然有疏散失败但是日志没有启用?
Java HotSpot(TM) 64-Bit Server VM (24.76-b04) for linux-amd64 JRE (1.7.0_76-b13), built on Dec 18 2014 16:58:39 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)
Memory: 4k page, physical 32934888k(13890072k free), swap 48197628k(48197628k free)
CommandLine flags:
-XX:AutoBoxCacheMax=3000000 -XX:ConcGCThreads=4 -XX:+DisableExplicitGC -XX:G1ReservePercent=25 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=11811160064 -XX:MaxDirectMemorySize=1073741824 -XX:MaxGCPauseMillis=1000 -XX:MaxHeapSize=11811160064 -XX:-OmitStackTraceInFastThrow
-XX:ParallelGCThreads=8 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:+PrintTenuringDistribution -XX:+UseCompressedOops -XX:+UseG1GC
它在71320.645开始了FullGC,但看起来没有疏散失败,有什么想法吗?
答案 0 :(得分:2)
在java 7上运行G1GC可能不是一个好主意。当时它有很多有问题的行为。其中,类卸载需要一个完整的GC,this has been fixed with jdk8u40
更不用说GC日志在8中提供了更多有用的信息。
其他原因也是可以想象的,例如需要比可用的更多连续自由区域的大量对象分配。 8的日志可能会更有用。
编辑:实际上,该功能可能位于旗帜后面的7u45,请尝试-XX:+PrintGCCause