前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM内存模型

JVM内存模型

原创
作者头像
开源日记
修改2020-12-03 10:34:33
4980
修改2020-12-03 10:34:33
举报
文章被收录于专栏:JVMGCJVMGC

总览

image-20201021222746282
image-20201021222746282

JVM标准中的五个组成部分

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

JDK1.7的运行时数据区

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

JDK1.8的运行时数据区

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

为什么移除永久代

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

什么是元空间

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总览
  • JVM标准中的五个组成部分
  • JDK1.7的运行时数据区
  • JDK1.8的运行时数据区
    • 为什么移除永久代
      • 什么是元空间
        • 元空间特点
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档