1.JVM运行时内存区划分线程独占区:程序计数器、本地方法栈、虚拟机栈线程共享区:元空间(<=1.7方法区)、堆**程序计数器**:线程私有,是一个很小的内存空间,可以看作是当前线程执行的字节码指标,也是唯一没有定义OOM的块**本地方法栈**:用于执行Native方法使用**虚拟机栈**:用于存放局部变量、操作数栈、动态链接、方法出口等信息**元空间**:存放类元信息、常量、已经被虚拟机加载的静态变量、**代码just-in-time编译器编译后的其他数据仍然保存在方法区,方法区位于堆中****heap**:存储对象实例的例子:/***@author:jujunchen*@description:CGLIB用于动态生成类,元空间存储类信息,-XX:MetaspaceSize=10m-XX:MaxMetaspaceSize=10m*如果只设置堆的大小,不会溢出*@date:2019/4/7*/publicclassJavaMetaSpaceOOM{staticclassOOMObject{}publicstaticvoidmain(finalString[]args){while(true){Enhancerenhancer=newEnhancer();enhancer.setSuperclass(OOMObject.class);enhancer.setUseCache(false);enhancer.setCallback(newMethodInterceptor(){@OverridepublicObjectintercept(Objecto,Methodmethod,Object[]objects,MethodProxymethodProxy)throwsThrowable{returnmethodProxy.invokeSuper(o,对象);}});增强器.create();}}}2.OOM、SOE实例、原因、排查方法//OOM-Xmx20m-Xms20m-XX:+HeapDumpOnOutOfMemoryErrorpublicclassOOMTest{publicstaticvoidmain(String[]args){List