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

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.
主站蜘蛛池模板: 区。| 柯坪县| 广水市| 麦盖提县| 南充市| 嵩明县| 大竹县| 卢氏县| 鄂托克前旗| 奉化市| 永川市| 渑池县| 健康| 南召县| 观塘区| 滨州市| 元阳县| 沈阳市| 湖南省| 弥勒县| 普格县| 山西省| 浙江省| 奉新县| 龙门县| 莱州市| 财经| 洮南市| 梅河口市| 孝昌县| 乐业县| 武威市| 米泉市| 东丽区| 肥乡县| 吴桥县| 西青区| 纳雍县| 吉木萨尔县| 梁山县| 潼关县|