JVM
专注与游离
人生如逆旅,我亦是行人。。。
展开
-
JVM学习笔记-垃圾回收之检测垃圾的方法
引用计数算法原理:对象A被其他对象引用时,引用计数+1,当其他对象被垃圾回收时,对象A的引用计数-1,当对象A的引用计数=0时,对象A可被垃圾回收。优点:实现简单,判定效率高缺点:需要额外的空间去存储计数器,关联更新计数时增加了时间开销,无法解决循环依赖补充:Cpython(C语言开发的Python解释器)使用双向链表解决循环依赖问题,但是需要额外字段去存储标识数据(gc_refs),费空间、费性能可达性算法什么样的对象可作为GCRoot: 如果一个指针,他保存了堆内存里的对象地址,但.原创 2021-01-14 15:49:09 · 207 阅读 · 0 评论 -
JVM学习笔记-垃圾回收之安全点与安全区域
安全点程序只有在特定位置才能进行GC,这些位置被称为安全点。安全点的选定基本上是以程序“是否具有让程序长时间执行的特征”为标准进行选定的(方法调用、循环跳转、异常跳转等)安全点太少可能导致GC等待时间太长,太频繁会影响系统性能。如何判断发生GC时所有线程是否都在安全点上- 主动式中断:设置一个中断标志,当线程走到此位置时,判断标志是否为真,如果为真则将自己挂起等待GC- 抢先式中断:当GC发生时中断全部线程来判断是否都在安全点上,恢复不在安全点上的线程让他跑到安全点上(没有虚拟机使用这种方式,原创 2021-01-12 16:24:00 · 390 阅读 · 0 评论 -
JVM学习笔记-JIT编译优化
JIT编译优化公共子表达式消除– ab+bc = (a+b)*c方法内联–将方法调用直接替换称方法体中的代码以减少压栈和出栈的开销逃逸分析–确定方法内被定义的对象能否被外部方法引用全局变量赋值逃逸方法返回值逃逸实例引用逃逸线程逃逸(共享变量或赋值给类变量)针对没有逃逸的对象可以做的优化对象的栈上内存分配–不会逃逸的对象创建在栈内存中(有几率,并不是所有),减少GC次数同步锁消除–不会逃逸的对象不需要加锁,在编译时就将同步锁去掉,以减少加锁、解锁带来的资源开销标量替换–当A对象原创 2020-11-11 22:24:59 · 136 阅读 · 1 评论