Java Virtual Machine(JVM)内存模型

Java Virtual Machine(JVM)内存模型

JVM内存 -> 根据不同空间的存储特点和存储的数据划分。

-> 方法区:线程共享的内存区域,存储已经被虚拟机加载的类信息、常量、静态变量。

 

-> 堆:被所有线程共享的一块内存区域,在虚拟机启动时创建。所有的对象、数组都要在堆上分配。(即每次使用new,就会在堆中开辟一块新的存储空间)

 

-> 栈:虚拟机栈,每个方法被执行时,都会同时创建一个栈帧(用途:存储该方法的局部变量、操作栈、动态链接、方法出口等信息),方法调用完毕,就销毁栈帧。

 

-> 本地方法栈:为虚拟机使用的native方法服务。

 

-> 程序计数器:当前线程所执行的字节码的行号指示器。(字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令)。


Java的基本数据类型中的JVM中的位置:

在“堆”或者在“栈” -> 关键是看声明变量的位置

局部变量 -> 栈

全局变量 -> 堆

(1)在方法中声明的基本数据类型,也就是局部变量。当方法被调用时,创建一个栈帧存储该方法的局部变量等信息,基本数据类型就跟着在栈。方法执行完,栈帧就会被销毁,局部变量也被销毁,这也就是局部变量只在方法有效的原因。

(2)在类中声明的基本数据类型,也就是全局变量,存在堆中,不会随某个方法的销毁而失效。


线程共享区的内存回收目标,主要是针对常量池的回收和对类型的卸载。