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

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.
主站蜘蛛池模板: 和顺县| 普兰店市| 高尔夫| 崇文区| 蕉岭县| 渭源县| 铜山县| 新巴尔虎右旗| 阿瓦提县| 普兰店市| 静乐县| 沁源县| 康平县| 天气| 同心县| 筠连县| 南阳市| 姜堰市| 金平| 兴仁县| 罗山县| 文水县| 山东省| 江源县| 贡嘎县| 泗阳县| 红原县| 北川| 旺苍县| 乌海市| 大英县| 宁夏| 拉孜县| 宣恩县| 金秀| 吉林市| 鹰潭市| 兴仁县| 连城县| 嵩明县| 周至县|