JVM
舒适边缘
坚定目标是做最好的准备,降低预期是做最坏的打算
展开
-
逃逸分析
如果变量只能被一个线程访问,不会被其他线程访问,那么变量的读写是线程安全的,可以进行锁消除 对象作用域只在方法或线程中,可以将对象在栈中分配,使用完后就销毁,减小了GC的压力 标量替换:不能在被拆分的量叫做标量,对象是个聚合量,当对象不被外部访问,同时这个对象可以被拆散的话,那么不创建对象,用方法中需要使用的标量来替换原创 2023-12-07 14:33:20 · 383 阅读 · 0 评论 -
JVM 垃圾回收器
G1将内存分为很多大小相同独立的区域。虽然是独立,但是region中可能引用其他region的对象。这样进行可达性分析时,扫描就比较麻烦,所以每个region定义了一个Remembered set记录与其他区域的引用关系,GC扫描时只要扫描Remembered set防止全部扫描。原创 2023-12-07 14:31:19 · 362 阅读 · 0 评论 -
类加载机制
热更新、热部署加载不同版本的jar,解决冲突对类进行加解密。原创 2023-12-07 14:30:08 · 316 阅读 · 0 评论 -
JVM 垃圾回收
垃圾回收算法 一、垃圾回收算法 标记清除 标记GC Root不可达对象,然后清除。存在内存碎片问题 标记整理 标记GC Root不可达对象,然后清除,将存活的对象移动到一端。避免了内存碎片的问题 复制算法 将内存分为相同的两部分,每次使用一块内存,垃圾回收时将存活的移到到另外一块。存在问题就是浪费内存 分代回收算法 分为新生代和老年代。新生代分为eden和两个survivor区,新生代采用复制算法,每次回收都有98%的对象死亡,将存活的对象存入一个survivor区,当下次回收原创 2023-12-07 14:28:57 · 360 阅读 · 0 评论