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

JVM 内存模型

JVM内存模型

  • JVM组成
  • JVM内存模型
  • GC
  • 对象结构

JVM组成

  1. 类装载子系统
  2. 字节码执行引擎
  3. 运行时数据区(内存模型)

JVM内存模型

  1. 本地方法栈(线程独立)
  2. 栈(线程独立)
    设置一个线程栈大小参数:-Xss,默认1M
    每个线程会在栈内存区分配一块内存给本线程使用,我们叫线程栈,每个方法是一个栈帧。栈帧里面大概分4部分:局部变量表、操作数栈、动态链接、方法出口。
  3. 程序计数器(线程独立)
  4. 堆(线程共享)
    设置堆大小参数:-Xms -Xmx
  5. 方法区也叫元空间(线程共享)
    设置方法区大小参数:-XX:MetaspaceSize -XX:MaxMetaspaceSize
    使用直接内存,上限可以无限大直至撑满物理内存。
    默认值为21M。建议要设置此参数。因为初始值太小,方法区满会触发fullGC。然后回触发扩容。

GC

  1. GC Root:方法区静态变量、线程栈局部变量表、本地方法栈变量
  2. 堆中的区域分配:老年代(2/3)、新生代(Eden区(8),S0区(1),S1区(1))
    new一个对象时,先判断是不是栈上分配(逃逸分析),如果不是判断是不是大对象(可以通过参数设置阈值),大对象直接进入老年代;不是大对象进入Eden区,如果Eden区放不下,触发一次monirGC,剩余存活对象进入S0,下次再触发minorGC时同时回收Eden和S0,剩余存货对象进入S1,以此交替。每存活一次年龄+1,达到最大年龄15(可以设置进入老年大的年龄),进入老年代。如果GC之后对象还是放不下,会触发FullGC,同时回收老年代、新生代和元数据区。对象进入Eden区时,也可能根据当前存活对象大小等判断,S区放不下时,也可能直接触发FullGC。
  3. 方法区回收的无用的类需满足的条件:
    2.1 该类所有的实例对象被回收
    2.2 加载该类的classloader已经被回收
    2.3 该类的Class对象没有在任何地方引用,无法在任何地方通过反射访问该类

对象结构

  1. 对象头
    1.1 Mark Word(32位4字节,64位8字节)
    1.2 Klass Pointer类型指针(64位开启压缩4字节,关闭压缩8字节)类的元数据的指针
    1.3 数组长度(4字节,只有数组对象才有)
  2. 实例数据
  3. 对齐填充(保证是8字节的整数倍)

文章转载自:

http://yMVJzZFz.rqfzp.cn
http://pXvkkfba.rqfzp.cn
http://bWC0mtUs.rqfzp.cn
http://whXV12Ja.rqfzp.cn
http://8LEEV803.rqfzp.cn
http://RPPRhuZq.rqfzp.cn
http://kPqvCQpR.rqfzp.cn
http://d9NhqAU0.rqfzp.cn
http://byHo8fLx.rqfzp.cn
http://xBTdCA8r.rqfzp.cn
http://hDQbRsRO.rqfzp.cn
http://VVaxWsdU.rqfzp.cn
http://g9FgRQZz.rqfzp.cn
http://yIyjcTx0.rqfzp.cn
http://7LJsHGKN.rqfzp.cn
http://7jjY5tkz.rqfzp.cn
http://yaSy3mT5.rqfzp.cn
http://FfgP8Ul2.rqfzp.cn
http://p30CPoVy.rqfzp.cn
http://P0JnGtD8.rqfzp.cn
http://7wSOSjku.rqfzp.cn
http://PaPplgXv.rqfzp.cn
http://Ty3hi9gZ.rqfzp.cn
http://ayIV8ReD.rqfzp.cn
http://UP3N5O8Q.rqfzp.cn
http://2bOuhXSt.rqfzp.cn
http://Lo7bYqfd.rqfzp.cn
http://eHPuk9dL.rqfzp.cn
http://GlQ6SFE0.rqfzp.cn
http://HRZYxxwl.rqfzp.cn
http://www.dtcms.com/a/65908.html

相关文章:

  • python-leetcode-定长子串中元音的最大数目
  • 树莓百度百科更新!宜宾园区新业务板块全解析
  • 【Java--数据结构】优先级队列( PriorityQueue)
  • 【从零开始学习计算机科学】编程语言(二)名字、关键字、保留字 与 变量
  • CentOS7上面搭建sentry24版本详细教程与踩坑记录
  • Elixir语言的容量规划
  • 概率论的基本知识
  • NPU的应用场景:从云端到边缘
  • 如何将实际入账的统计内部订单主数据修改成本中心
  • ADB报错:daemon not running...
  • 新闻网页信息抽取
  • 【Node.js入门笔记5---fs文件信息与元数据】
  • Masked Autoencoders Are Scalable Vision Learners——论文学习
  • 2025年人工智能应用全景解析:从医疗革命到产业重构的深度实践
  • coding ability 展开第三幕(滑动指针——基础篇)超详细!!!!
  • 【农业大数据处理与应用】实验四 多元回归与随机森林模型在植被病虫害监测中的对比分析
  • 浅谈时钟启动和Systemlnit函数
  • 管理学习状态
  • 精准车型识别:视觉分析技术的力量
  • 强化学习(赵世钰版)-学习笔记(7.时序差分学习)
  • 在 Windows 上快速部署 OpenManus:从安装到运行
  • (七)使用X99主板搭配双XEON E5-2660 V4或同系列CPU+NVIDIA P106-100部署Deepseek的可行性
  • 简单5位验证码+快捷键的使用
  • 配置普通链接二维码规则 校验文件检查失败
  • 将后缀为GGUF 模型,运行在Ollama
  • 如何自己做奶茶,从此告别奶茶店
  • 基于Spring Boot的小区疫情购物系统的设计与实现(LW+源码+讲解)
  • 【从零开始学习计算机科学】数据库系统(三)关系数据库设计
  • 2024年第十五届蓝桥杯软件C/C++大学A组——五子棋对弈
  • Pandas真实案例进阶:从数据清洗到高性能分析的完整指南