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

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.kler.cn/a/16121.html

相关文章:

  • 【postman】怎么通过curl看请求报什么错
  • spring boot整合https协议
  • 使用API有效率地管理Dynadot域名,编辑账户中whois联系人信息
  • 服务器显卡和桌面pc显卡有什么不同
  • 前端框架大比拼:React.js, Vue.js 及 Angular 的优势与适用场景探讨
  • 2024-11-13 学习人工智能的Day26 sklearn(2)
  • ChatGPT技术原理 第三章:深度学习基础
  • 代码评审平台Gerrit安装配置方法介绍
  • ChatGPT资料汇总学习
  • 3.6 cache存储器
  • JavaWeb之过滤器Filter(通俗易懂版)
  • 【算法】Dinner Plate Stacks 餐盘栈
  • Codeforces Round 867 (Div 3) 总结
  • JavaScript 中 try...catch 的 10 个使用技巧
  • windows10系统如何实现telnet内网穿透
  • 求n个斐波拉契数列的和
  • mysql性能分析
  • Spring Boot 3.x 系列【27】应用篇之集成Lombok简化开发
  • chatgpt 镜像版
  • 【五一创作】[论文笔记]图片人群计数CSRNet,Switch-CNN
  • Linux基础指令
  • 手把手教你爬取网站信息
  • 关于FFMPEG中的filter滤镜的简单介绍
  • Servlet
  • Doris(24):Doris的函数—聚合函数
  • 【2023程序员必看】前端行业分析