
JVM
文章平均质量分 85
qiu7213
这个作者很懒,什么都没留下…
展开
-
Jvm 垃圾回收算法
标记-清除(Mark-Sweep)标记需要回收的对象(前文的使用可达性分析来判断标记) 清理掉需要回收的对象标记-清除(Mark-Compact)标记需要回收的对象 把所有的存活对象压缩到内存的一端 清理掉边界外所有的空间复制(Copy)把内存分为两块,每次只使用一块 将正在使用的内存中的存活对象复制到未使用的内存中去,然后清除掉正在使用的内存中的所有对象 交换两个内存的角色,等待下次回收...原创 2021-11-09 16:05:13 · 123 阅读 · 0 评论 -
Jvm 垃圾收集器
垃圾收集算法:为实现垃圾回收提供理论支持垃圾收集器:利用垃圾收集算法,实现垃圾回收的实践落地。各种垃圾收集器之间也是可以配合使用的:比如 CMS可以和ParNew配合,CMS和Parallele Scavenge 不能使用Stop The World简写为 STW,也叫全局停顿,Java代码停止运行,native 代码继续运行,但不能与JVM进行交互。 原因:多半由于垃圾会受到在;也可能是 Dump线程,死锁检查、 Dump 堆等导致。...原创 2021-11-09 18:01:27 · 456 阅读 · 0 评论 -
Jvm 垃圾回收算法 : 引用计数&可达性分析
什么场景下该使用是吗垃圾回收策略垃圾回收发生在哪些区域对象在什么时候能够被回收什么场景下该使用是吗垃圾回收策略对内存要求苛刻的场景:想办法提高对象的回收效率,多回收掉一些对象,腾出更多内存 在Cpu使用率高的情况下:降低高并发垃圾回收的频率,让CPU更多的去执行你的业务而不是垃圾回收垃圾回收发生在哪些区域堆和方法区线程共享,垃圾回收的主要对象。方法区回收废弃的常量和不需要使用的类。对象在什么时候能够被回收引用计数法:通过对象的引用计数器来判断是否被引用。但是解决.原创 2021-11-09 14:40:49 · 765 阅读 · 0 评论 -
编译器优化 [3] 逃逸分析、标量替换、栈上分配
逃逸分析原创 2021-11-06 12:56:40 · 272 阅读 · 0 评论 -
编译器优化 [2]- 方法内联
方法内联当一个线程调用方法时,就会把栈帧压入到栈中。压栈和出栈都是有Cpu,内存,时间开销的。Jvm会自动识别热点方法,并发起方法内联。方法内联就是把目标方法的代码复制到发起调用的方法之中,避免发生真实的方法调用。可以避免压栈和出栈的操作。提高效率。方法内联:public class InlineTest { private static int add1(int x1,int x2,int x3,int x4){ return add2(x1, x2) + a原创 2021-11-05 16:05:18 · 373 阅读 · 0 评论 -
编译器优化 [1]
字节码是如何运行的?Java有两种运行方式: 解释执行:由解释器一行一行翻译执行 编译执行:把字节码编译成机器码,直接执行机器码两种运行方式对比: 解释执行: 优势在于没有编译的等待时间 性能相对差一些编译执行: 运行效率会高很多,一般认为比解释执行快一个数量级 带来了额外的开销(Cpu开销,内存开销) 查看使用哪种运行方式java -versionjava versio...原创 2021-11-04 14:46:33 · 462 阅读 · 0 评论 -
JVM 内存模型 、对象分配流程、 垃圾收集器
Jvm内存模型、对象创建流程、垃圾收集器serial 单线程收集器, 简单高效, 收集过程会有 STW, 用于新生代。 使用复制算法serial 的老年代版本:serial old 单线程收集器, 简单高效, 收集过程会有 STW, 用于老生代。 使用标记-整理算法ParNew 多线程版本, 多核, 收集过程会有 STW,但是停顿时间减少,吞吐量更大业务代码时间 / (业务代码时间+垃圾收集时间) = 吞吐率 99s / 99s + 1s(垃圾收集时...原创 2020-09-11 10:40:01 · 944 阅读 · 0 评论 -
JVM - 类加载机制 & 类加载流程
JVM 的 堆,栈,方法区堆:提供所有类实例和数组对象存储区域 jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身(即具体的实例) jvm只有堆区(heap)和方法区被所有线程共享 存储的全部是对象,每个对象都包含一个与之对应的class的信息 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。栈:每个线程包含一个...原创 2020-11-11 11:10:40 · 176 阅读 · 1 评论