美文网首页Java虚拟机那些事JVM虚拟机
重新理解jvm运行时的内存分布(堆栈方法区交互)

重新理解jvm运行时的内存分布(堆栈方法区交互)

作者: 先生zeng | 来源:发表于2019-11-16 20:39 被阅读0次

栈堆方法区的交互关系


java栈存储的本地变量表,包括八种数据类型和引用类型,引用类型指向对象的地址,保存在reference,指向java堆,对象类型数据会保存变量名,变量类型,变量值等,这些会存在方法区中去查看(在初始化的时候)。

在java栈中会存放对象实例(s1),但是他对象实例中具体的数据会由java栈中的引用指向java堆中的地址,里面的对象实例数据存放(实例名,实例相关类型,元数据信息。。。。),而静态变量,常量,类加载后的信息等会存放在方法区,在运行时需要调用的时候去方法区取,所以方法区和java堆都是共享的。而java栈时线程独有的数据(包括程序计数器,本地方法栈)。

java堆解析(整个JVM只有一个堆!!!)

一个jvm实例,只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件之后,需要把类,方法,常量放到堆内存中,保存所有的引用类型的真实信息,以方便执行器执行。堆内存分为三部分。



(养老区就是老年代)

堆内存 逻辑上 分为三部:新生 +养老 +方法区


新生代

eden+survivor+Spaces(元空间或者叫方法区或者Perm)

Perm

Perm 永久存储区,是一个常驻内存的区域,用于存放jdk自身携带的Class,Interface的元数据,被装载进此区域的数据是不会被垃圾回收器回收的,只有关闭jvm后才会释放此区域所占用的内存。

如果出现OutOfMemoryReeor: PermGen space 说明java虚拟机堆永久带Perm内存设置不够,一半出现这种情况,都是程序启动加载大量第三方jar呆滞的,

java版本区别(重点!!!):

对于HotSpot虚拟机很多开发者习惯将方法区称之为永久代(Parmenent
Gen),永久代是方法区的一个实现,这是不对的,方法区是逻辑上的部分。在jdk7中已经将原本放在永久代的字符串常量池移走了。

常量池( Constant Pool Constant PoolConstant Pool Constant Pool Constant Pool )是方法区的一部分, Class Class文件除了有类的版本、 字段方法、接口等描述信息外,还有一项就是常量池这部分内容将在类加载后进入。

Eden

伊甸园区,所有对象刚new出来都会放在这里。

对象分两种:
1.如果是大对象直接分配在Old区。
2.如果禁言了逃逸分析,会在栈上分配。
以上两种都不符合,放入伊甸园区。(Eden区)

元空间(非堆区域,堆外空间)

看java7中如图:



对比java8


相关文章

  • 重新理解jvm运行时的内存分布(堆栈方法区交互)

    栈堆方法区的交互关系 java栈存储的本地变量表,包括八种数据类型和引用类型,引用类型指向对象的地址,保存在ref...

  • 2021-01-05

    本文转载自公众号 占小狼的博客 说”JVM内存模型“,有人会说是关于JVM内存分布(堆栈,方法区等)这些介绍,也有...

  • java面试jvm总结

    JVM→ JVM 内存结构运行时数据区:堆、栈、方法区、直接内存、运行时常量池、堆存放对象, 方法区他用于存储已被...

  • Java从入门到入坑(底层篇)

    01:JVM 1:JVM内存结构 class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、 堆...

  • Android内存

    Android内存优化 Java内存模型 运行时数据区分为几个部分 从上图可以看到运行时候分为: 方法区 堆栈区 ...

  • 线程在JVM中的运行原理

    。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈...

  • JVM学习笔记

    JVM 注意:0、JVM运行时数据区和JVM内存模型不要搞混1、运行时数据区可以分为:堆、方法区、虚拟机栈、本地方...

  • JVM 复盘

    JVM 复盘 一 JVM内存块结构 主要是堆栈;方法区;而我们关注比较多的是堆区域,而方法区存放的信息比较少很少会...

  • Java内存管理

    2.9 JVM内存管理 2.9.1 运行时数据区域 JVM所管理的内存可以分为一下几个运行时数据区域: 其中方法区...

  • 一文理解JVM虚拟机(内存、垃圾回收、性能优化)解决面试中遇到问

    一. JVM内存区域的划分 1.1 java虚拟机运行时数据区 java虚拟机运行时数据区分布图: JVM栈(Ja...

网友评论

    本文标题:重新理解jvm运行时的内存分布(堆栈方法区交互)

    本文链接:https://www.haomeiwen.com/subject/nvpyictx.html