首页 > 其他分享 >记录一篇 jvm内容:主要为 堆方向

记录一篇 jvm内容:主要为 堆方向

时间:2024-10-12 17:25:56浏览次数:1  
标签:Java 一篇 记录 对象 虚拟机 GC 内存 jvm 15

运行时数据区:

  Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。

  根据《java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区。

        

    

                  

Java堆(Java Heap):
  是虚拟机所管理的内存中最大的一块,是所有线程共享的一块内存区域(线程不安全,OOM),在虚拟机启动时创建。
  唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。
  Java堆是垃圾收集器管理的内存区域,因此一些资料中也称为"GC堆"(Garbage Collected Heap)。
  由于现代垃圾收集器大部分都是采用分代收集理论设计,所以 Java 堆可以细分为:新生代(Young Generation)与老年代(Old Generation),新生代包括:Eden空间、From Survivor、To Survivor 空间等。
  堆细分目的是更好地回收内存,或者更快地分配内存。

                                   --------------摘自《深入理解Java虚拟机—JVM高级特性与最佳实践(第三版)》

 

Java堆内存默认情况下,新生代占1/3 ,老年代占2/3。 新生代又把  Eden空间 8/10 、From Survivor 1/10、To Survivor  1/10 

 

几个关键词:minorGC、majorGC、fullGC 

Minor GC 主要在 年轻代(Young Generation)。

  当 Eden 区的空间被填满时,会触发 Minor GC。Survivor 区的满并不会直接触发 Minor GC。

Major GC 主要发生在老年代(Old Generation)。

  当老年代的空间不足时,会触发 Major GC。此外,如果 Minor GC 后,从年轻代晋升到老年代的对象导致老年代空间不足,也会触发 Major GC。

Full GC 清理整个堆内存(Heap),包括年轻代、老年代以及永久代(Permanent Generation,已被 Metaspace 替换)或元空间(Metaspace)。

  调用 System.gc() 方法时,JVM 会建议执行 Full GC,但不一定执行;当老年代空间不足时,如果没有足够的空间来存放 Minor GC 后晋升的对象时;通过 Minor GC 后进入老年代的平均对象大小大于老年代的可用内存时;当方法区(Method Area)或 Metaspace 元空间不足时;

 

关于年轻代内部 minor GC后的变化(动态年龄对象判断):

  Eden 区的空间被填满时 会触发 minor GC , 存活的对象将进入 survivor区域。

  每触发一次 minorGC ,survivor区 存活的对象将进行 from survivor,to survivor ( 这两个 Survivor 区域按照顺序被命名为 from 和 to)两个区域的交替存储并使对象的存活年龄+1。

  默认年龄最大为15 (对象内存布局中Mark Word用4个bit 存储对象分代年龄,4个bit最大 存储 15)

  当它的年龄增加到一定程度 (也就是15次 minorGC都没被处理)  就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold 来设置。

  动态年龄对象判断:多个对象所占空间超过survivor区50% ,某个年龄段以上的对象将被移入老年代。(一般情况都是没有触发15这个阈值)

    按年龄从小到大进行累积, 当累积到某个年龄,空间大小超过survivor的50%,取 这个年龄与 MaxTenuringThreshold 中最小一个值作为阈值,大于等于这个值的对象,移入老年代

===============================================================================================================================================================================================================

 OOM:(OutOfMemoryError)

 

4bit最大能存储的值为15‌。

4bit存储范围解析

  • ‌二进制表示‌:4位二进制数可以表示从0000到1111的所有组合。
  • ‌十进制转换‌:将这些二进制数转换为十进制,范围即为0(0000)到15(1111)。
  • ‌最大值确定‌:因此,4bit能够存储的最大十进制数值是15。

这个结论直接基于二进制到十进制的转换规则,以及二进制数的位数决定了其能表示的最大值。

 

标签:Java,一篇,记录,对象,虚拟机,GC,内存,jvm,15
From: https://www.cnblogs.com/zy115/p/18460644

相关文章

  • 『板刷 AGC』[AGC017] A~E 做题记录
    这场打得更菜了,只会A,B,D,没办法,人机是这样的,我还是太菜了。A:Biscuits人机计数题。一个直接的思路是把\(a\)的所有数对\(2\)取模,然后选出\(m\)个\(a_i=1\)的\(i\)满足\(m\bmod2=p\),而剩下的\(a_i=0\)的\(i\)就是可选可不选。设\(s=\sum_{i=1}^n[a_i\bmod2=......
  • zinx-Golang轻量级TCP服务器框架学习记录
    目录背景介绍学习资料源代码背景介绍由于工作需要,需要开发高并发的golang服务器。作为一个golang小白,选择一个好的框架既是对项目的负责,也是一个学习的过程。之所以选择Zinx框架,是因为其完整的文档和视频讲解,这对一个初学者来说是非常友好的学习资料Golang轻量级并发服务......
  • 微信记录怎么恢复?恢复已删除微信历史记录的4种方式
    恢复已删除微信历史记录的4种方式如何在有/没有备份的情况下在iPhone和Android上恢复旧的或已删除的微信历史记录,如聊天对话、语音消息、照片、图片和视频剪辑?参考本指南,祝您成功恢复微信数据。关于微信数据恢复“说真的,微信里有旧的或者以前删除的消息和图片怎么恢复?......
  • 机器学习之概率图模型PGM,看这一篇就够了!
    第一部分:基本含义能够通过微小的现象看到事物的本质“见微知著,睹始知终”:见到事情的苗头,就能知道它的实质和发展趋势。看到开始就知道结局了。比喻小中见大、以小见大。我们前面研究过朴素贝叶斯模型,但是人家是有各种独立分布的条件假设的,它无法处理又相互关联的特征属性,也......
  • windows问题记录1
    隐藏启动分区1、win+R运行命令diskmgmt.msc2、选择要隐藏的系统盘符,右键——更改驱动器号和路径3、将当前盘的驱动器号删除,删除时会提示两次,删除后电脑将不能访问此盘。不要将c盘取消驱动器号,负责可能系统无法启动。 关闭系统自动播放需求:挂载cd盘,cd盘内容自动被打开并运......
  • [题目记录]一本通高手训练-数列
    题意定义n-数列为满足以下条件的数列\({a_i}\):数列长度不小于\(3\),且每个元素为\(1\)到\(n\)的整数.对于任意\(k\ge3\),有$(a_k-a_{k-2})(a_{k-1}-a_{k-2})<0$.给出\(n\),求n-数列的个数,对\(10^9+7\)取模.\(n\le10^{500000}\)时空限制......
  • 大模型RAG入门到实战基础教程(非常详细),大模型RAG入门到精通,收藏这一篇就够了!
    写在前面大模型(LargeLanguageModel,LLM)的浪潮已经席卷了几乎各行业,但当涉及到专业场景或行业细分域时,通用大模型就会面临专业知识不足的问题。相对于成本昂贵的“PostTrain”或“SFT”,基于RAG的技术方案往成为一种更优选择。本文从RAG架构入手,详细介绍相关技术细节,并附上......
  • RBAC管理系统审计记录
    RBAC管理系统审计记录环境搭建环境依赖Windowsidea2022jdk8RBAC源码phpstudy的mysql5.6.7简易搭建流程(Windows下)直接使用idea打开项目,然后选中右上角的项目构建项目中有几处需要修改:○1、要开启phpstudy的mysql,然后创建rbac数据库,并将源码中的rbac.sql数据导入......
  • 海康大华宇视等摄像头/执法记录仪等设备通过GB28181注册到LiveGBS流媒体平台,如何实时
    @目录1、如何监听设备状态2、device订阅2.1、设备上线消息2.2、设备离线消息2.2、通道上线消息2.2、通道离线消息3、订阅示例3.1、连接REDIS3.2、订阅device示例3.3、设备上线示例3.3.1、注册上线后3.4、设备离线示例3.4.1、注销离线后4、更多4.1、如何切换redis5、搭建GB28181视......
  • 【学习记录丨UVM】1.6代理人agent
    《UVM白皮书》关于agent的介绍driver和monitor处理同一协议,uvm中通常将二者封装在一起,成为一个agent。一、一个agent示例classmy_agentextendsuvm_agent;my_driverdrv;my-monitormon;`uvm_component_utils(my_agent)functionnew(stringname="my_age......