当前位置: 首页 > news >正文

JVM内存模型的演变

1,背景

class文件、类的加载过程。我们的class文件就要进入到JVM内存里,我们沿着经典的JDK1.6,JDK1.7,JDK1.8看看在其中都经历了哪些改变

概念的统一:

  • 方法区:
    方法区可以看作是JVM逻辑上管理一片区域的名字的概念
  • 永久代:
    永久代和元空间都是对方法区的实现,只不过是1.7以前是永久代,1.8开始永久代被替代成元空间了。
  • 元空间:

2,内存模型的演变

1.6及以前JVM运行时数据区,方法区叫永久代

请添加图片描述

JVM1.7

1.7永久代还存在,但是已经逐步去永久代,字符串常量和静态变量移到堆中请添加图片描述

JVM1.8 及以后

1.8以后,无永久代,类型信息、字段、方法、常量直接保存在元空间,元空间用的是直接内存,字符串常量池和静态常量还是保持在堆中。请添加图片描述

思考

永久代为什么要被元空间替换?
永久代设置空间大小是很难确定的。在某些场景下,如果动态加载的类过多,容易产生OOM。或者是朝生夕死的类比较多。
对永久代的调优比较困难

字符串常量池为什么调整?
永久代的回收效率比较低,在full gc的时候才会触发。发生full gc是老年代的空间不足、永久代空间不足才会促发。这就导致stringTable回收效率不高。而我们开发中会有大量的字符串被创建,回收效率低,导致永久代内存不足。放到堆中能及时回收。

http://www.lryc.cn/news/64001.html

相关文章:

  • DataX3同步Mysql数据库数据到Mysql数据库和DataX3同步mysql数据库数据到Starrocks数据库
  • 你是否曾经为自己写的代码而感到懊恼?那如何才能写出高质量代码呢?
  • 常用 Composition API【VUE3】
  • --商业模式--
  • JavaWeb《HTML基础标签》
  • ChatGpt 能取代人类吗?
  • PHP内存溢出Allowed memory size of 解决办法
  • 重回代码,学习总结
  • 【Leetcode -86.分隔链表 -92.反转链表Ⅱ】
  • 算法记录 | 48 动态规划
  • CRM部署Always on 后 CRM报无法更新数据库,数据库只读,且读写分离不正常
  • 麓言信息设计创意思维,打开设计师思路
  • POJ3704 括号匹配问题 递归方法
  • leetcode — JavaScript专题(三):完全相等的 JSON 字符串、复合函数、 分组、柯里化、将对象转换为 JSON 字符串
  • OGNL 的表达式
  • JAVA面试中遇到的那些坑,80%的人都种过招
  • 【测试开发】单元测试、基准测试和性能分析(以 Go testing 为例)
  • linux中一条命令查询当前端口的进程,然后拿到进程pid,作为另一条杀死进程的参数
  • 程序员找工作难吗?我用亲身经历来告诉大家
  • 【Web服务】HTTP和DNS重要知识
  • 【C++】-关于类和对象的默认成员函数(中)-拷贝构造函数和赋值运算符重载函数
  • c++11上篇
  • 异构无线传感器网络路由算法研究(Matlab代码实现)
  • MySQL数据库——MySQL TRUNCATE:清空表记录
  • 财报解读:连续三年逆势增长的背后,欧派家居到底靠的是什么?
  • 希望计算机专业同学都知道这些宝藏博主
  • 1694_week1_MIT使用Python编程学习手记1
  • 第二十一章 光源
  • CVPR 2023 超分辨率(super-resolution)方向上接收论文总结
  • Python 基于 Django 的学生成绩管理系统,可视化界面(附源码,教程)