JVM内存模型
JVM内存模型:
- java堆:在JVM中内存最大的一块区域,此区域存放new出来的对象实例。所有线程共享此区域。
- 方法区:存储类信息、常量、静态变量、 即时编译器编译后的代码等数据。
- 程序记数器:记录下一行要执行的命令行号。
- JVM栈:用于存储局部变量表、操作栈、动态链接、方法出口等信息。
- 局部变量表:存储局部变量。
- 操作栈:局部变量在运算的过程中使用的空间。
- 方法出口:方法结束时跳转的上一个方法
- 动态链接:局部变量中如果多态引用时,就会有动态链接。
- 本地方法栈:与JVM栈是类似,它只为native方法服务。
堆的内存区域划分:
- 当new出来的对象,大小小于eden区域时,就会存在eden区域。当发生了垃圾回收时,将会被转到from。当from、to被垃圾回收到15后,将会被回收到老年代。
- 当new出来的对象大于eden区域时,会直接放入老年代。
- 元空间(MetaData)是JDK1.8后出现的,在JDK1.8前为永久代。