1. Code 1:
public class JVMTest { public static void main(String args[]) throws InterruptedException { byte [] bytes1 = new byte[1024*1024*2]; byte [] bytes2 = new byte[1024*1024*2]; byte [] bytes3 = new byte[1024*1024*4]; Thread.sleep(2000); byte [] bytes4 = new byte[1024*1024*4]; Thread.sleep(2000); }}
Run Java-xms20m-xmx20m-xmn10m-XX: + useserialgc-XX: + printheapatgc-xloggc: GC. Log jvmtest.
GC twice:
{Heap before GC invocations=0 (full 0): def new generation total 9216K, used 5287K [7f9a00000, 7fa400000, 7fa400000) eden space 8192K, 64% used [7f9a00000, 7f9f29c78, 7fa200000) from space 1024K, 0% used [7fa200000, 7fa200000, 7fa300000) to space 1024K, 0% used [7fa300000, 7fa300000, 7fa400000) tenured generation total 10240K, used 0K [7fa400000, 7fae00000, 7fae00000) the space 10240K, 0% used [7fa400000, 7fa400000, 7fa400200, 7fae00000) compacting perm gen total 21248K, used 4813K [7fae00000, 7fc2c0000, 800000000) the space 21248K, 22% used [7fae00000, 7fb2b3628, 7fb2b3800, 7fc2c0000)No shared spaces configured.0.904: [GC 5287K->4447K(19456K), 0.0315833 secs]Heap after GC invocations=1 (full 0): def new generation total 9216K, used 351K [7f9a00000, 7fa400000, 7fa400000) eden space 8192K, 0% used [7f9a00000, 7f9a00000, 7fa200000) from space 1024K, 34% used [7fa300000, 7fa357ed8, 7fa400000) to space 1024K, 0% used [7fa200000, 7fa200000, 7fa300000) tenured generation total 10240K, used 4096K [7fa400000, 7fae00000, 7fae00000) the space 10240K, 40% used [7fa400000, 7fa800020, 7fa800200, 7fae00000) compacting perm gen total 21248K, used 4813K [7fae00000, 7fc2c0000, 800000000) the space 21248K, 22% used [7fae00000, 7fb2b3628, 7fb2b3800, 7fc2c0000)No shared spaces configured.}{Heap before GC invocations=1 (full 0): def new generation total 9216K, used 4711K [7f9a00000, 7fa400000, 7fa400000) eden space 8192K, 53% used [7f9a00000, 7f9e41eb0, 7fa200000) from space 1024K, 34% used [7fa300000, 7fa357ed8, 7fa400000) to space 1024K, 0% used [7fa200000, 7fa200000, 7fa300000) tenured generation total 10240K, used 4096K [7fa400000, 7fae00000, 7fae00000) the space 10240K, 40% used [7fa400000, 7fa800020, 7fa800200, 7fae00000) compacting perm gen total 21248K, used 4817K [7fae00000, 7fc2c0000, 800000000) the space 21248K, 22% used [7fae00000, 7fb2b4498, 7fb2b4600, 7fc2c0000)No shared spaces configured.2.940: [GC 8807K->8537K(19456K), 0.0193472 secs]Heap after GC invocations=2 (full 0): def new generation total 9216K, used 345K [7f9a00000, 7fa400000, 7fa400000) eden space 8192K, 0% used [7f9a00000, 7f9a00000, 7fa200000) from space 1024K, 33% used [7fa200000, 7fa2566e8, 7fa300000) to space 1024K, 0% used [7fa300000, 7fa300000, 7fa400000) tenured generation total 10240K, used 8192K [7fa400000, 7fae00000, 7fae00000) the space 10240K, 80% used [7fa400000, 7fac00030, 7fac00200, 7fae00000) compacting perm gen total 21248K, used 4817K [7fae00000, 7fc2c0000, 800000000) the space 21248K, 22% used [7fae00000, 7fb2b4498, 7fb2b4600, 7fc2c0000)No shared spaces configured.}
2. Code 2:
public class JVMTest { public static void main(String args[]) throws InterruptedException { byte [] bytes1 = new byte[1024*1024*2]; byte [] bytes2 = new byte[1024*1024*2]; byte [] bytes3 = new byte[1024*1024*2]; System.out.println("step 1"); byte [] bytes4 = new byte[1024*1024*2]; Thread.sleep(2000); System.out.println("step 2"); byte [] bytes5 = new byte[1024*1024*2]; byte [] bytes6 = new byte[1024*1024*2]; System.out.println("step 3"); byte [] bytes7 = new byte[1024*1024*2]; Thread.sleep(2000); }}
Java-xms20m-xmx20m-xmn10m-XX: + useserialgc-XX: + printheapatgc-xloggc: GC. Log jvmtest
Once minor GC once full GC: the reason why minor GC is promoted to the old generation is larger than the remaining space of the old generation.
{Heap before GC invocations=0 (full 0): def new generation total 9216K, used 7335K [7f9a00000, 7fa400000, 7fa400000) eden space 8192K, 89% used [7f9a00000, 7fa129c88, 7fa200000) from space 1024K, 0% used [7fa200000, 7fa200000, 7fa300000) to space 1024K, 0% used [7fa300000, 7fa300000, 7fa400000) tenured generation total 10240K, used 0K [7fa400000, 7fae00000, 7fae00000) the space 10240K, 0% used [7fa400000, 7fa400000, 7fa400200, 7fae00000) compacting perm gen total 21248K, used 4814K [7fae00000, 7fc2c0000, 800000000) the space 21248K, 22% used [7fae00000, 7fb2b38c0, 7fb2b3a00, 7fc2c0000)No shared spaces configured.1.019: [GC 7335K->6495K(19456K), 0.0418591 secs]Heap after GC invocations=1 (full 0): def new generation total 9216K, used 351K [7f9a00000, 7fa400000, 7fa400000) eden space 8192K, 0% used [7f9a00000, 7f9a00000, 7fa200000) from space 1024K, 34% used [7fa300000, 7fa357ed8, 7fa400000) to space 1024K, 0% used [7fa200000, 7fa200000, 7fa300000) tenured generation total 10240K, used 6144K [7fa400000, 7fae00000, 7fae00000) the space 10240K, 60% used [7fa400000, 7faa00030, 7faa00200, 7fae00000) compacting perm gen total 21248K, used 4814K [7fae00000, 7fc2c0000, 800000000) the space 21248K, 22% used [7fae00000, 7fb2b38c0, 7fb2b3a00, 7fc2c0000)No shared spaces configured.}{Heap before GC invocations=1 (full 0): def new generation total 9216K, used 6754K [7f9a00000, 7fa400000, 7fa400000) eden space 8192K, 78% used [7f9a00000, 7fa040af0, 7fa200000) from space 1024K, 34% used [7fa300000, 7fa357ed8, 7fa400000) to space 1024K, 0% used [7fa200000, 7fa200000, 7fa300000) tenured generation total 10240K, used 6144K [7fa400000, 7fae00000, 7fae00000) the space 10240K, 60% used [7fa400000, 7faa00030, 7faa00200, 7fae00000) compacting perm gen total 21248K, used 4817K [7fae00000, 7fc2c0000, 800000000) the space 21248K, 22% used [7fae00000, 7fb2b47b0, 7fb2b4800, 7fc2c0000)No shared spaces configured.3.073: [Full GC 12898K->12633K(19456K), 0.0712905 secs]Heap after GC invocations=2 (full 1): def new generation total 9216K, used 4441K [7f9a00000, 7fa400000, 7fa400000) eden space 8192K, 54% used [7f9a00000, 7f9e56680, 7fa200000) from space 1024K, 0% used [7fa300000, 7fa300000, 7fa400000) to space 1024K, 0% used [7fa200000, 7fa200000, 7fa300000) tenured generation total 10240K, used 8192K [7fa400000, 7fae00000, 7fae00000) the space 10240K, 80% used [7fa400000, 7fac000c8, 7fac00200, 7fae00000) compacting perm gen total 21248K, used 4817K [7fae00000, 7fc2c0000, 800000000) the space 21248K, 22% used [7fae00000, 7fb2b47b0, 7fb2b4800, 7fc2c0000)No shared spaces configured.}
Rules for new generation objects to be promoted to the old generation: objects that still exist after multiple minor GC or objects that cannot be placed in space can be directly promoted to the old generation