java-初识JVM的内存分配(5个区域)概念--系列(一)

JVM基本概念:
JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。

JVM内存划分:
拥有五类(直接内存除外):
本地方法栈,方法区,程序计数器,堆Heap,虚拟机栈。

1.程序计数器
是每个线程都拥有的一块空间,线程私有,存储当前线程执行的字节码所在的行号指示器,执行方法时,计数器存储执行位置(对应字节码指令位置),代表了方法的执行位置。
2.本地方法栈
是与对应的操作系统OS进行操作的方法的集合,是每个线程都拥有的,为调用native服务而存在。
3.方法区
又称为永久代,是线程共享的,存储JVM的类加载信息(类的方法,版本,时间,方法,接口等),常量,静态变量,(非new对象)编译器产生的字节码文件内容。
包含的运行时常量池,是重要组成部分,存储了在编译时产生的各种变量字符引用信息,通常在类加载完成后,进行存储,是JVM认可类的主要信息标准。
4.堆
Heap属于运行时内存,被线程共享,存放被java程序通过new关键字得到的对象,如数组,哈希表,自定义类,等,是GC的重要区域
在java的GC中,将此区域按代划分,
可分为新生代(存放新new对象,过大对象除外),老年代(存放已被创建一段时间的new对象),新生代占1/3区域,老年代占2/3区域,
新生代又可细化分为
Ende,From survivor,to survivor
三个类别。
Ende:当此区域不足时,新生代自动开启一次GC,当被创建对象过大的时候,直接放入Old区。
From survivor:上次回收时的幸存对象。
To survivor:是上次复制的幸存对象,年龄足够就会被存入老年代。
5.虚拟机栈
是线程私有的,用于描述方法执行的内存模型。
在线程执行方法时,会创建一个栈帧,入栈,在方法执行完后,将对应栈帧出栈。
栈帧包含了:方法局部变量表,操作数栈,动态链接,方法出口(返回地址)。
方法局部变量表:方法内变量,执行结束后就销毁。
操作数栈:计算方法执行过程产生的结果。
动态链接:存储常量池的指针,方便方法动态访问常量池。
方法出口:当方法正常结束,异常结束,都需要依靠此信息返回对应信息,以便程序能继续执行。

栈帧示意图:
java-初识JVM的内存分配(5个区域)概念--系列(一)_第1张图片

java内存对应示意图:
java-初识JVM的内存分配(5个区域)概念--系列(一)_第2张图片

今天开始正式了解JVM!

你可能感兴趣的:(JVM系统学习)