国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

java - Peruntukan memori ArrayList, isu gc rujukan generasi silang
黃舟
黃舟 2017-05-17 10:07:27
0
1
1055

Apakah peruntukan memori ArrayList dalam JVM?

假設(shè)List<BigObject> list = new ArrayList<>(); 

private static class BigObject{
        private byte[] foo;

        BigObject(){
            foo = new byte[20 * 1024];
        }
    }

Tambah BigObject secara berterusan, Adakah hubungan rujukan seperti berikut?

Kemudian ygc berlaku Adakah BigObject memasuki kawasan lama Jika objek arrayList tidak memasuki kawasan lama, bukankah terdapat rujukan generasi silang? Jika ia masuk, maka obj = new BigObject() diperuntukkan dalam generasi baharu selepas ygc, dan kemudian list.add(obj), tidakkah terdapat rujukan kepada kawasan lama->muda Apakah peruntukan memori? suka?

Asal masalah

Jalankan kod berikut:
Parameter: /jdk1.7.0_79.jdk/bin/java -Xmx500M -Xms500M -Xmn200M -XX:+UseConcMarkSweepGC -XX:+UseCMSIinitiatingOccupancyOnly -XX:CMpConcurcyOnly -XX:CMpCurapan rentTime -XX : +PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps -verbose:gc -XX:+PrintGCDetails -Xloggc:/Users/.log*??

import java.util.ArrayList;
import java.util.List;

/**
 * @author ***
 * @time 2017-04-19-11:14
 */
public class CrossReference {
    private static int unit = 20 * 1024;

    public static void main(String[] args) {
        allocate();

        try {
            Thread.sleep(1000);
            System.out.println("allocate end************");
            Thread.sleep(100000);
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    private static void allocate(){
        List<BigObject> list = new ArrayList<>();
        int size = 1024 * 1024 * 400;
        int len = size / unit;

        for( int i = 0; i < len; i++){

            BigObject bigObject = new BigObject();
            list.add(bigObject);
        }
    }

    private static class BigObject{
        private byte[] foo;

        BigObject(){
            foo = new byte[unit]; //
        }
    }


}
Melihat gc.log, ia akan kelihatan bahawa selepas melaksanakan kaedah allocate(), kawasan lama masih diduduki lebih daripada 90%, dan CMS GC dijalankan secara berterusan tetapi tidak boleh dikitar semula.

黃舟
黃舟

人生最曼妙的風(fēng)景,竟是內(nèi)心的淡定與從容!

membalas semua(1)
小葫蘆

Baru-baru ini saya melihat dua artikel yang mungkin berguna kepada anda:

http://zhuanlan.51cto.com/art...
http://zhuanlan.51cto.com/art...

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan