没有疏散失败,但G1GC仍然是FullGC

时间:2015-06-17 02:51:52

标签: java garbage-collection g1gc

我正在调整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,但看起来没有疏散失败,有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在java 7上运行G1GC可能不是一个好主意。当时它有很多有问题的行为。其中,类卸载需要一个完整的GC,this has been fixed with jdk8u40

更不用说GC日志在8中提供了更多有用的信息。

其他原因也是可以想象的,例如需要比可用的更多连续自由区域的大量对象分配。 8的日志可能会更有用。

编辑:实际上,该功能可能位于旗帜后面的7u45,请尝试-XX:+PrintGCCause