您好,登錄后才能下訂單哦!
方法區是虛擬機規范定義的,是所有線程共享的內存區域,保存系統的類的信息。比如:類的字段、方法、常量池、構造函數的字節碼內容、代碼、JIT 代碼
永久代、metaspace 是對方法區的實現。
Hotspot 實行分代管理內存(新生代、老年代、永久代)
jdk8 實現方法區用 metaspace 堆外內存
虛擬機參數:
jdk1.7
-XX:PermSize=5M -XX:MaxPermSize=10M
jdk1.8
-XX:MaxMetaspaceSize=150M
代碼
package com.mousycoder.mycode.thinking_in_jvm;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
/**
* 方法區溢出
*
* @version 1.0
* @author: mousycoder
* @date: 2019-06-22 15:44
*/
public class PermgenOOM {
public static void main(String[] args) throws InterruptedException {
int i = 0;
while (true) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(User.class);
enhancer.setUseCache(false);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
return methodProxy.invokeSuper(o,objects);
}
});
enhancer.create();
Thread.sleep(1000);
}
}
}
class User {
private long id;
private String name;
}
jdk1.7
jdk1.8
感謝您的耐心閱讀,如果您發現文章中有一些沒表述清楚的,或者是不對的地方,請給我留言,您的鼓勵是作者寫作最大的動力。
作 者 : @mousycoder
原文出處 : http://mousycoder.com/thinking-in-jvm/9/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。