「其他:关于 JDK1.8 元空间的介绍:」 Move part of the contents of the permanent generation in Hotspot to the Java heap and the remainder to native memory. http://openjdk.java.net/jeps/122
publicOperandStack(int maxStack){ if (maxStack > 0) { slots = new Slot[maxStack]; for (int i = 0; i < maxStack; i++) { slots[i] = new Slot(); } } } //... }
另外,jconsole 可以通过 IDEA 提供的 Terminal 启动,直接输入 jconsole,回车即可。
4.2 测试结果
org.itstack.interview.MetaSpaceOomMock$$EnhancerByCGLIB$$bd2bb16e999099900 org.itstack.interview.MetaSpaceOomMock$$EnhancerByCGLIB$$9c774e64999199910 org.itstack.interview.MetaSpaceOomMock$$EnhancerByCGLIB$$cac97732999299920 org.itstack.interview.MetaSpaceOomMock$$EnhancerByCGLIB$$91c6a15a999399930 Exception in thread "main" java.lang.IllegalStateException: Unable to load cache item at net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:79) at net.sf.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:119) at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:294) at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:480) at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:337) at org.itstack.interview.MetaSpaceOomMock.main(MetaSpaceOomMock.java:34) Caused by: java.lang.OutOfMemoryError: Metaspace at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:467) at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:339) at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492) at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:96) at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94) at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) at java.util.concurrent.FutureTask.run(FutureTask.java) at net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ... 6 more