1.程序计数器:一块很小的内存区域,是线程私有的,看作当前线程所执行的字节码的行号指示器;
2.java虚拟机栈:和程序计数器相同,都是每个线程私有的,每个方法运行是都会创建一个帧栈,里面包含:
局部变量表、
操作数栈、
动态链表、
方法出口等信息。一个方法的调用直至结束,就是一个入栈和出栈的过程;
3.本地方法栈:和虚拟机栈类似,不同的是虚拟机栈服务java方法(字节码),本地方法栈服务于native 方法修饰的方法;
4.堆:虚拟机中管理最大的一块内存,是所有线程共享的一块区域,存放对象实例;
-XX:+HeapDumpOnOutOfMemoryError(可以让虚拟机堆溢出后储存快照便于分析);
5.方法区:堆内的一块区域,储存已被加载类的信息、常量、静态变量、即使编译器编译后的代码等数;
6.运行时常量池:存放常量池(Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息用于存放编译期生成的各种字面量和符号引用);-XX:PermSize=? -XX:MaxPermSize=?
7.直接内存:非运行时数据区,基于jdk1.4后诞生的NIO 而创建的,为了避免使native修饰的方法频繁的从navite堆 给java堆复制数据;默认与-Xmx相同 可以设定 -XX:MaxDirectMemorySize=?,