
JVM
文章平均质量分 86
姜希成
岁月流逝,将来的某时某处,我会在叹息中想起,林间的路分成两股,而我选择了人迹罕至之徒,那一刻起,一切差别已成定铸。
展开
-
JVM-JIT
为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化。如果逃逸分析出来的对象可以在栈上分配,那么该对象的生命周期就跟随线程了,就不需要垃圾回收。如果确定一个对象不会逃逸出线程之外,那么让对象在栈上分配内存可以提高JVM的效率。从不逃逸到方法逃逸到线程逃逸,称之为对象由低到高的不同逃逸程度。必须要符合热点代码,JIT才会优化。原创 2024-09-09 10:02:24 · 348 阅读 · 0 评论 -
JVM-GC-ZGC
这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。为了细粒度地控制内存的分配,和G1一样,ZGC将内存划分成小的分区,在ZGC中称为页面(page)小页面指的是2MB的页面空间,中页面指32MB的页面空间,大页面指受操作系统控制的大页。下次GC中的并发标记(同时做上次并发标记对象的重定位):基于指针着色的重定位算法。原创 2024-09-09 09:57:59 · 1107 阅读 · 0 评论 -
JVM-GC-G1&ZGC
UMA表示内存只有一块,所有CPU都去访问这一块内存,那么就会存在竞争问题(争夺内存总线访问权),有竞争就会有锁,有锁效率就会受到影响,而且CPU核心数越多,竞争就越激烈。ZGC 是能自动感知NUMA架构并充分利用NUMA架构特性的。对象指针必须是64位,那么ZGC就无法支持32位操作系统,同样的也就无法支持压缩指针了(CompressedOops,压缩指针也是32位)默认年轻代对堆内存的占比是5%,如果堆大小为4096M,那么年轻代占据200MB左右的内存,对应大概是100个Region,可以通过。原创 2024-09-09 09:46:32 · 1041 阅读 · 0 评论 -
JVM-GC
标记-清除算法:算法分为“标记”和“清除”阶段:标记存活的对象, 统一回收所有未被标记的对象(一般选择这种);重新标记: 重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短。标记-整理算法:根据老年代的特点特出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。原创 2024-09-09 09:35:18 · 683 阅读 · 0 评论 -
JVM-类加载机制
AppClassLoader 的 loadClass 方法最终会调用其父类 ClassLoader 的 loadClass 方法。加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载。初始化:对类的静态变量初始化为指定的值,执行静态代码块。解析:将符号引用替换为直接引用(静态链接过程)准备:给类的静态变量分配内存,并赋予默认值。验证:校验字节码文件的正确性。为什么要设计双亲委派机制。原创 2024-09-09 09:19:47 · 659 阅读 · 0 评论 -
JVM-对象创建&内存分配
如果minor gc之后剩余存活的需要挪动到老年代的对象大小还是大于老年代可用空间,那么也会触发full gc,full gc完之后如果还是没有空间放minor gc之后的存活对象,则也会发生“OOM”在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、 实例数据(Instance Data)和对齐填充(Padding)将“GC Roots” 对象作为起点,从这些节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,其余未标记的对象都是垃圾对象。原创 2024-09-09 09:13:39 · 1095 阅读 · 0 评论 -
JVM-调优
【代码】JVM-调优。原创 2024-09-09 09:07:35 · 271 阅读 · 0 评论 -
JVM-常量池
intern。原创 2024-09-09 09:05:01 · 962 阅读 · 0 评论