原创

JVM的内存结构

温馨提示:
本文最后更新于 2022年12月16日,已超过 874 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

JVM的内存结构

堆内存: jvm里最大的区域,是线程共享的,存储的是对象实例。

方法区 :方法区也是线程共享的,主要存储的是jvm加载的类信息,常量、静态变量、即时编译器编译后的代码等数据

程序计数器 :一块较小的内存空间,它的作用是标记当前线程执行到什么位置。

栈内存 :每个线程独立一个区域,生命周期和线程相同,主要存储线程执行的方法的局部变量,方法出口灯信息。

JVM1.7 和 1.8 内存模型的区别

file

Java7 Hotspot中方法区位于永久代中。同时,永久代和堆是相互隔离的,但它们使用的物理内存是连续的。

Java8 永久代的垃圾收集是和老年代捆绑在一起的,因此无论谁满了,都会触发永久代和老年代的垃圾收集。

JVM中的堆栈模型

file

数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。

基本数据类型的特点:直接存储在栈(stack)中的数据

引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里

引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

正文到此结束