官术网_书友最值得收藏!

Sample code

The following sample code allocates an image array of size 999999 and loads images to it. Then, the code retrieves the image bytes and stores them to a byte array of size 999999.

On a heap size of 3,044 MB and region size of 1 MB, this code will force full G1 GC and eventually shut down the JVM with OutOfMemoryError:

import java.io.*; 
import java.awt.image.BufferedImage; 
import javax.imageio.ImageIO; 
public class TriggerG1FullGC { 
    final BufferedImage[] images = new BufferedImage[999999]; 
    final byte[][] imgByte = new byte[999999][]; 
 
    public TriggerG1FullGC() throws Exception { 
        for (int i = 0; i < 999999; i++) { 
            images[i] = ImageIO.read(new File("img.jpg")); 
        } 
        System.out.println("Images read"); 
 
        for (int i = 0; i < 999999; i++) { 
            ByteArrayOutputStream baos=new ByteArrayOutputStream(); 
            ImageIO.write(images[i], "jpg", baos ); 
            imgByte[i] = baos.toByteArray(); 
        } 
        System.out.println("Bytes read"); 
    } 
    public static void main(String... args) throws Exception { 
        new TriggerG1FullGC(); 
    } 
} 

You can execute the preceding code using the following command:

    > java -Xlog:gc* -Xlog:gc*:myG1log.log TriggerG1FullGC 

 

The preceding code will output GC logs to the console (by courtesy of -Xlog:gc*). It will also store the log to the myG1log.log file. The code (as we expected) will fail with OutOfMemoryError. Let's examine the contents of the GC log file.

Starting with Java 9, G1 is the default GC. So, the preceding code doesn't use any runtime options to specifically use G1.
主站蜘蛛池模板: 柳江县| 商洛市| 楚雄市| 都安| 镇赉县| 安泽县| 黄骅市| 南皮县| 靖远县| 卢龙县| 米泉市| 兴山县| 保康县| 嘉荫县| 兴隆县| 保山市| 淅川县| 两当县| 泰宁县| 青铜峡市| 璧山县| 东港市| 台中县| 新丰县| 辉县市| 图木舒克市| 永德县| 玉龙| 怀化市| 双鸭山市| 邻水| 双江| 绵竹市| 宁海县| 阿克苏市| 尼玛县| 屏山县| 鲁甸县| 维西| 彰化县| 新竹市|