专栏首页JVMGCJVM内存模型
原创

JVM内存模型

总览

image-20201021222746282

JVM标准中的五个组成部分

  • 方法区
  • 程序计数器
  • 本地方法栈
  • 虚拟机栈

JDK1.7的运行时数据区

image-20201021224100216
  • 永久代是方法区的实现
  • jdk1.6之前字符串常量池在方法区
  • jdk1.7之后字符串常量池被移动到堆区

JDK1.8的运行时数据区

image-20201021224342226
  • jdk1.8去掉了永久代
  • 引入了元数据区
  • Jdk1.7中的运行时常量池移动到元数据区
  • 元数据区存在于直接内存中

为什么移除永久代

方法区大小难以设定,容易发生内存溢出。永久代存放着Class相关信息,一般信息在编译期就能确定,但是如果在一些动态生成的Class的应用中,如:Spring中的动态代理,大量的JSP页面或动态生成的JSP页面,由于方法区在一开始就要分配好,因此难以确定大小,容易发生内存溢出。 GC复杂效率低,方法区存放元数据和各种常量,但是这些数据被类的实例所引用,导致垃圾回收非常困难. 促进HotSpot VM和JRockit VM融合,JRockit VM没有方法区

什么是元空间

元空间永久代类似都是对JVM规范中方法区的实现。区别在于元空间不在JVM虚拟机中,因此元空间的空间受本地内存制约。

元空间特点

  • 每个加载器都有自己的空间
  • 不会单独回收某个类
  • 元空间对象的位置是固定的
  • 如果发现某个加载器不在存活,则将整个空间回收
image-20201021232107384
wx.jpg

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM内存模型

    java404
  • JVM内存模型

    先磨磨肩擦擦掌,小二很早就听说jvm的内存很是奇特,今日一看果然不同凡响。下面且听小二一一道来。

    shengjk1
  • JVM内存模型

    运行时数据区域 Java虚拟机(Java Virtual Machine,简称JVM)在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这...

    武培轩
  • jvm内存模型

    JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创...

    lyb-geek
  • JVM内存模型

    JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创建...

    黑洞代码
  • JVM内存模型

    前一段时间写过一篇关于 JVM虚拟机之类加载的过程 的文章,其中讲述了Java虚拟机对类的处理。最近听了一次部门内部有关JVM的分享,自己也顺便回顾了之前阅读《...

    静默加载
  • 2.1 jvm内存模型

    Description of Java Conceptual Diagram(java结构)

    用户7798898
  • jvm(1):jvm内存模型

    身为一个职业的Java程序员,每天打交到最多的就是jvm,那么套用孙子的一句话“知己知彼方能百战不殆”,熟悉jvm也就意味着是我们进阶路上必过之槛,下面先来张图...

    yiduwangkai
  • JVM内存模型之栈

    内容 HotSpot将java虚拟机栈与本地方法栈合并成一个了(操作系统中的栈是通过硬件ESP、EBP寄存器来实现的)。虚拟机的栈在细分,分为: 当前栈...

    shengjk1
  • JVM内存模型之堆

    内容 作为我们程序员最关系的部分:堆,也是占用JVM内存最大的一块。主要用来存放对象实例、数组等,也是GC发生最多的地方。java堆可以处在物理上不连续的内...

    shengjk1
  • JVM内存模型详解

    在Java中,JVM内存模型主要分为堆,方法区,程序计数器,虚拟机栈,本地方法栈,如下图

    小土豆Yuki
  • java之JVM内存模型

    西西嘛呦
  • 浅谈JVM内存模型

    http://tutorials.jenkov.com/java-concurrency/java-memory-model.html

    CoffeeLand
  • 了解JVM内存模型

    如果想了解JVM内存模型,首先我们要知道JVM是什么?JVM全称 Java Virtual Machine ,即Java虚拟机,是用于运行Java程序编译后的字...

    烟雨星空
  • JVM初探 -JVM内存模型

    Tanyboye
  • JVM初探 -JVM内存模型

    Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存...

    哲洛不闹
  • JVM内存模型之直接内存

    直接内存 又称堆外内存,也就是说这不是jvm运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域,但这部分也会被频繁的使用,而且也可能导致OOM。

    shengjk1
  • JVM内存模型之方法区

    内容 主要用来存放已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。JDK8之前又被称为永久带 (Permanent Generatio...

    shengjk1
  • Jvm内存模型深度理解

    之前是对jvm内存模型一知半解,本次打算抽时间认认真真的理解一遍jvm内存模型,在这个过程中遇到了好多问题,针对这些问题查询资料再加上自己的理解对jvm内存模型...

    XING辋

扫码关注云+社区

领取腾讯云代金券