内存模型以及分区,需要详细到每个区放什么

Posted peekapoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存模型以及分区,需要详细到每个区放什么相关的知识,希望对你有一定的参考价值。

内存模型以及分区,需要详细到每个区放什么

整个计算机的内存中的一部分划给了Java程序管理,在执行Java程序的时候,虚拟机会将这部分内存划分为不同区域,都有各自的用途以及生命周期。

分区:程序计数器、虚拟机栈、本地方法栈、堆、方法区(包含运行时常量池)

程序计数器(PCR)它可以看作是当前线程所执行的字节码的行号指示器。字节码工作器是通过改变这个计数器的值来获取下一条需要执行的字节码,线程中的很多基础功能都通过这个步骤来实现。
程序计数器中放置的是当前正在执行的虚拟机字节码指令的地址,如果正在执行的是Native方法,那么计数器中的值则为空(Undefined)。

虚拟机栈,是描述Java方法执行的内存模型。虚拟机栈中存放的是栈帧,栈帧中存储有局部变量表、操作数、方法接口等信息。

本地方法栈和虚拟机栈类似,不同点在于虚拟机栈是为字节码服务的,本地方法栈是为Native方法服务的。并且虚拟机规范对本地方法栈没有强制规定,可以按需求自由实现。

堆是存放对象实例的地方,它是Java程序管理的内存中最大的一块,内存回收是这一块中经常发生的事情,为了方便回收与分配,这一块内存通常会被划分成不同区域。

方法区是存放被虚拟机加载的类信息、常量、静态变量等数据。其中常量被放在一个叫运行时常量池的地方。这里存放的是各种字面量和符号引用。

以上是关于内存模型以及分区,需要详细到每个区放什么的主要内容,如果未能解决你的问题,请参考以下文章

JVM常见面试题

JVM常见面试题

大厂首发!思源笔记docker

Java虚拟机知识点总结

java写安卓脚本,一文全懂

java写安卓脚本,理论+实战双管齐下!