如何用简单易懂的方式分析JVM内存模型?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1330个文字,预计阅读时间需要6分钟。
JVM(Java虚拟机)主要包括五个区域,分别是:程序计数器、虚拟机栈、本地方法栈、堆和方法区。在JVM中,每个线程有一个程序计数器和虚拟机栈,堆和方法区是所有线程共享的。五块区域中,堆和方法区是动态分配的,程序计数器、虚拟机栈和本地方法栈是固定大小的。程序计数器存储线程的执行指令,虚拟机栈和本地方法栈存储局部变量和方法调用信息,堆存储对象实例,方法区存储类信息、常量、静态变量等。
JVM(Java虚拟机)主要包括五块区域,分别是程序计数器、虚拟机栈、本地方法栈、堆、方法区。在JVM当中堆和方法区各有一个,一条线程有一个栈和一个程序计数器。五块区域中当中变化最频繁是栈,最先有数据的是方法区,垃圾回收器主要针对的是堆。
1.程序计数器
由于在JVM中多线程是通过线程轮流切换来换取CPU执行时间的,在任何一个确定的时刻,一个CPU只会执行一条线程的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器。
程序计数器占用内存空间非常小,是线程私有的,每个线程运行的时候都会有一个独立的计数器,是Java虚拟机规范中唯一一个没有规定任何OutOfMemoryError情况的区域。如果程序执行的时候线程执行的是一个Java方法,计数器是有值的,其记录的是程序正在执行的字节码指令的地址;如果执行的是Natvie方法,计数器的值则为空(Undefined)。
2.虚拟机栈
Java虚拟机栈是线程私有的,生命周期和线程一致,中存储的是一个个栈帧,每个栈帧对应着一个被调用的方法。方法调用的时候,该方法所需的内存空间在栈内存中分配,称为压栈。方法执行结束之后,该方法所属的内存空间释放,称为弹栈(栈内存遵循先进后出,后进先出的原则)。虚拟机栈中主要存储的是局部变量、引用、操作数栈、动态链接、方法的出口等信息。
本文共计1330个文字,预计阅读时间需要6分钟。
JVM(Java虚拟机)主要包括五个区域,分别是:程序计数器、虚拟机栈、本地方法栈、堆和方法区。在JVM中,每个线程有一个程序计数器和虚拟机栈,堆和方法区是所有线程共享的。五块区域中,堆和方法区是动态分配的,程序计数器、虚拟机栈和本地方法栈是固定大小的。程序计数器存储线程的执行指令,虚拟机栈和本地方法栈存储局部变量和方法调用信息,堆存储对象实例,方法区存储类信息、常量、静态变量等。
JVM(Java虚拟机)主要包括五块区域,分别是程序计数器、虚拟机栈、本地方法栈、堆、方法区。在JVM当中堆和方法区各有一个,一条线程有一个栈和一个程序计数器。五块区域中当中变化最频繁是栈,最先有数据的是方法区,垃圾回收器主要针对的是堆。
1.程序计数器
由于在JVM中多线程是通过线程轮流切换来换取CPU执行时间的,在任何一个确定的时刻,一个CPU只会执行一条线程的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器。
程序计数器占用内存空间非常小,是线程私有的,每个线程运行的时候都会有一个独立的计数器,是Java虚拟机规范中唯一一个没有规定任何OutOfMemoryError情况的区域。如果程序执行的时候线程执行的是一个Java方法,计数器是有值的,其记录的是程序正在执行的字节码指令的地址;如果执行的是Natvie方法,计数器的值则为空(Undefined)。
2.虚拟机栈
Java虚拟机栈是线程私有的,生命周期和线程一致,中存储的是一个个栈帧,每个栈帧对应着一个被调用的方法。方法调用的时候,该方法所需的内存空间在栈内存中分配,称为压栈。方法执行结束之后,该方法所属的内存空间释放,称为弹栈(栈内存遵循先进后出,后进先出的原则)。虚拟机栈中主要存储的是局部变量、引用、操作数栈、动态链接、方法的出口等信息。

