Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions JVM内存模型
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
###JVM运行时数据区:
##1、方法区(method area)
线程共享,存放被虚拟机加载的类信息、常量、态变量、即时编译器编译后的代码数据等。
回收目标:常量池的回收和对类型的卸载。

##2、虚拟机栈(VM Stack)
线程私有,虚拟机描述执行java方法的内存模型,每个方法执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。
局部变量表:存放编译期可知的各种类型的数据、对象引用和returnAddress类型,所需内存在编译期分配完成,当一个方法进入时,该方法需在帧中分配多大的局部变量空间完全确定。

##3、本地方法栈(Native Method Stack)
线程私有,与虚拟机栈类似,区别是,虚似机栈执行java方法,而本地栈执行native方法。

##4、堆(heap)
线程共享,在虚拟机启动时创建。
存放对象实例,几乎所有对象实例都在这里分配内存,也是垃圾回收器管理的主要区域。
根据现在收集器的分代思想,可细分为:新生代、老年代,新生代还可细分为eden\survivor1\survivor2区。

##5、程序计数器(program counter register)
线程私有,可以看作是当前线程所执行的字节码的行号指令器。
如果运行的是java方法,存放的是虚拟机所执行的字节码指令的地址。
若是native方法,是空值。