Skip to content

Commit ec1ae7b

Browse files
committed
MetaSpace
1 parent 77b2d7b commit ec1ae7b

2 files changed

Lines changed: 15 additions & 8 deletions

File tree

MD/OOM-analysis.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@ Process finished with exit code 1
4141

4242
## 方法区/运行时常量池溢出
4343

44-
> `JDK8` 中将永久代移除,使用 MetaSpace 来保存类加载之后的类信息。
44+
> `JDK8` 中将永久代移除,使用 `MetaSpace` 来保存类加载之后的类信息。字符串常量池也被移动到 Java 堆
4545
4646
`PermSize``MaxPermSize` 已经不能使用了,在 JDK8 中配置这两个参数将会发出警告。

src/main/java/com/crossoverjie/oom/heap/PermGenOOM.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.crossoverjie.oom.heap;
22

3-
import com.crossoverjie.proxy.jdk.CustomizeHandle;
4-
import com.crossoverjie.proxy.jdk.ISubject;
5-
import com.crossoverjie.proxy.jdk.impl.ISubjectImpl;
3+
import net.sf.cglib.proxy.Enhancer;
4+
import net.sf.cglib.proxy.MethodInterceptor;
5+
import net.sf.cglib.proxy.MethodProxy;
66

7-
import java.lang.reflect.Proxy;
7+
import java.lang.reflect.Method;
88

99
/**
1010
* Function:方法区内存溢出
@@ -17,9 +17,16 @@ public class PermGenOOM {
1717

1818
public static void main(String[] args) {
1919
while (true){
20-
CustomizeHandle handle = new CustomizeHandle(ISubjectImpl.class) ;
21-
ISubject subject = (ISubject) Proxy.newProxyInstance(PermGenOOM.class.getClassLoader(), new Class[]{ISubject.class}, handle);
22-
subject.execute() ;
20+
Enhancer enhancer = new Enhancer() ;
21+
enhancer.setSuperclass(HeapOOM.class);
22+
enhancer.setUseCache(false) ;
23+
enhancer.setCallback(new MethodInterceptor() {
24+
@Override
25+
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
26+
return methodProxy.invoke(o,objects) ;
27+
}
28+
});
29+
enhancer.create() ;
2330

2431
}
2532
}

0 commit comments

Comments
 (0)