发布时间:2023-05-17 11:30
jdk包含jre(Java运行时环境)+内部命令(如:javap、javac等)
类加载是指将Main.class文件中的二进制数据读入内存中,并将其放在运行时数据区的方法区内,然后在堆区中创建一个class对象
线程私有区域:
线程共有区域:
对象优先分配在Eden区,当空间不足时发起MinorGc
大对象直接进入老年代(如:字符串、数组)
长期存活的对象将进入老年代(虚拟机给每个对象一个年龄计数器Age,对象每熬过一次MinorGC Age+1,默认当Age=15晋升到老年代)
MinorGC后存活的对象Survivor放不下部分直接进入老年代
Eden区与Survivor区默认比例8:1:1
老年代空间分配担保机制,FullGC回收完还是没有足够空间存放新的对象就会发生OOM
对象动态年龄判断,Survivor区对象年龄总和超过Survivor区的50%,那么大于等于这批对象年龄最大值的对象直接进入老年代(这个规则是希望可能长期存活的对象尽早进入老年代)
(年龄1+年龄2+…+年龄n)>50%,年龄n以上的都进入老年代
对象动态年龄判断机制一般在minor GC后触发
程序中普遍存在的对象引用,只要存活就不会被回收,即使内存溢出。
SoftReference实现,内存溢出前回收。
WeakReference实现,下一次垃圾回收时回收。
PhantomReference实现,形同虚设。
先标记出所有需要回收的对象, 标记完成后统一回收,产生大量不连续的内存碎片,当有大对象要分配时,有可能再次触发垃圾回收。
在标记清楚的基础上,回收后集中整理内存区域,避免产生大量碎片内存,但效率降低。
将内存划分为相同大小的两块,每次使用其中一块,当这块部分使用完,将其中存活的对象复制到另一块,将使用过的空间一次性清除
优点:效率高、没有碎片、适合朝生夕死的内存区域。
缺点:内存利用率低,不适合对象存活率较高的老年代
新生代:复制算法
老年代:标记清楚/整理
单线程收集器,会Stop the word
新生代:复制算法
简单高效(很高的单线程收集效率)
serial old收集器 :serial的老年代版本
serial收集器的多线程版本
默认线程数与CPU核数相同
老年代版本:Parallel Old
新生代:复制算法
老年代:标记清整理算法
关注点(吞吐量) 高效率的利用CPU
吞吐量:运行代码时间:CPU总运行时间
目标:获取最短回收停顿时间
算法:标记—清除
运作过程:
并发收集、低停顿
一款面向服务器的垃圾收集器(主要针对面向多颗处理器及大容量内存的机器)高概率满足GC停顿时间的同时,还具备高吞吐量。
苹果手机处理器_台积电10月营收将创新高 全靠苹果A14处理器_手机
windows11安装虚拟机蓝屏警告卡BUG(终止代码:SYSTEM_SERVICE_EXCEPTION),已解决
elasticsearch的灵魂唯一master选举机制原理分析
字符串函数和字符函数详解——strlen,strcpy,strcat,strcmp......
ElasticJob3.0整合SpringBoot,ElasticJob-Lite【ElasticJob入门篇】
hualinux 进阶 1.9:pod[k8s最小编排单位]及pod本质(整理)