为什么这是gc的情况

时间:2016-08-12 03:02:32

标签: garbage-collection jvm

我的jdk版本是" 1.8.0_40"
我的代码是。

public class Test {  

    private static int _1M = 1024 * 1024;

    public static void main(String[] a) {

        byte[] b, b1, b2, b3;
        b = new byte[2 * _1M];
        b1 = new byte[2 * _1M];
        b2 = new byte[2 * _1M];
        b3 = new byte[4 * _1M];

    }
}  

我的运行时参数是

-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8  

我运行我的代码,我得到了这个gc结果,

Heap
PSYoungGen      total 9216K, used 7987K [0x00000007bf600000, 0x00000007c0000000, 0x00000007c0000000)
eden space 8192K, 97% used [0x00000007bf600000,0x00000007bfdccd60,0x00000007bfe00000)
from space 1024K, 0% used [0x00000007bff00000,0x00000007bff00000,0x00000007c0000000)
to   space 1024K, 0% used [0x00000007bfe00000,0x00000007bfe00000,0x00000007bff00000)
ParOldGen       total 10240K, used 4096K [0x00000007bec00000, 0x00000007bf600000, 0x00000007bf600000)
object space 10240K, 40% used [0x00000007bec00000,0x00000007bf000010,0x00000007bf600000)
Metaspace       used 3084K, capacity 4494K, committed 4864K, reserved 1056768K
class space    used 339K, capacity 386K, committed 512K, reserved 1048576K

你可以看到gc结果,总内存为12M,但我的代码只有10M。这段代码不运行gc。 这是为什么?

1 个答案:

答案 0 :(得分:1)

有几个地方可以回答这个问题,例如:Java using up far more memory than allocated with -Xmxhttps://plumbr.eu/blog/memory-leaks/why-does-my-java-process-consume-more-memory-than-xmx

长话短说:您的程序正在使用10M的堆,但堆只是JVM消耗的内存的一部分。 GC算法,JIT编译器等使用内部数据结构,这些结构甚至可以使JVM的总内存使用量增加一倍。