JVM规范

- 方法区(Method Area),用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据
- 堆(Heap),此内存区域的唯一目的就是存放对象实例
- 虚拟机栈(VM Stack),虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息
- 本地方法栈(Native Method Stack),本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地方法服务
- 程序计数器(Program Counter Register),可以看作是当前线程所执行的字节码的行号指示器
HotSpot JVM(JDK 7)

- 永久代实现了JVM规范中的方法区
- 静态变量和字符串常量池从永久代移动到堆
- 堆中新生代与老年代默认比例为1:2
- 新生代中Eden:S0:S1默认等于8:1:1
- 直接内存并不是虚拟机运行时数据区的一部分,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的
DirectByteBuffer
对象作为这块内存的引用进行操作
HotSpot JVM(JDK 8)
