/**
* 測試使用jdk8中是否仍然能夠使用永久代
* jvm options
* -Xms20m -Xmx20m -Xmn10m -XX:PermSize=10m -XX:MaxPermSize=10m -XX:+PrintGCDetails
*
* 結果運行提示:
* Java HotSpot(TM) Client VM warning: ignoring option PermSize=10m; support was removed in 8.0
* Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=10m; support was removed in 8.0
* 結論: jdk8 hotspot已經再也不使用方法區做爲永久代
*
* 經過jvm參數增長選項:-XX:SurvivorRatio=65535 再進行測試
*
* @author zhuotao
*
*/
public class PermGenTest {jvm
private static final int _1M = 1024 * 1024;
public static void main(String[] args) throws InterruptedException {
byte[] s0 = new byte[2 * _1M];
byte[] s1 = new byte[2 * _1M];
byte[] s2 = new byte[2 * _1M];
byte[] s3 = new byte[2 * _1M];
byte[] s4 = new byte[2 * _1M];
// 以上總共增長10M,觸發minor GC, 經過GC不難發現,這10M的內存有eden和tenured分攤
// 此時,新增一個1M的內存 , 再次觸發minor GC
byte[] s5 = new byte[1 * _1M];
// 新增一個1M的內存,由eden去進行擔保
// 此時再新增一個7M的對象,將致使OOM的發生,Eden區沒法存儲。eden仍然分擔3M的內容,而剩下的15M老年代擔保失敗,觸發Full GC,GC後仍然沒法存儲,發生OOM
byte[] s6 = new byte[7 * _1M];
}測試
}對象