![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《深入理解Java虚拟机》第三版-总结笔记
文章平均质量分 54
《深入理解Java虚拟机》第三版-总结笔记
zh_ly
这个作者很懒,什么都没留下…
展开
-
3.6低延迟垃圾收集器
3.6低延迟垃圾收集器 衡量垃圾收集器的三项最重要的指标:内存占用、吞吐量、延迟 1、Shenandoah收集器 Shenandoah使用和和G1一样的基于Region的堆内存布局,也存在有用于存放大对象的Humongous Region,默认的回收策略同样是优先处理回收价值最大的Region。 但与G1不同的是: ①支持并发的整理算法 ②默认不支持分代收集 ③摒弃了G1收集器中耗费大量内存和、计算资源的记忆集,改用名为“记忆矩阵”的全局数据结构进行跨Region引用的记录。降低了处理跨代引用指针的记忆集维原创 2022-04-26 15:44:39 · 68 阅读 · 0 评论 -
3.5经典垃圾收集器
3.5经典垃圾收集器 并行:描述的时垃圾收集线程之间的关系,标识多条垃圾回收线程再协同工作,此时默认用户线程时处于等待状态的。 并发:描述的是垃圾回收线程和用户线程的关系,说明同一时间垃圾收集线程和用户线程同时工作。 1、Serial收集器 特点: *历史最悠久的垃圾收集器 *进行垃圾回收时会暂停所有工作线程(stop the world)原创 2022-04-26 15:44:06 · 53 阅读 · 0 评论 -
3.3垃圾收集算法
3.3垃圾收集算法 1、分代收集理论 ①当前商业虚拟机的垃圾收集器大部分遵循了“分代收集”的理论,该理论建立在以下两个假说上 ——弱分代假说:绝大多是对象都是朝生夕灭( ①早晨刚生,晚上就死亡。②形容事物生命短暂。)的 ——强分代假说:熬过越多次垃圾收集的对象就越难以消亡 以上两种假说共同奠定了多款垃圾回收器一致的设计原则: ——收集器应该将java堆划分为多个不同的区域,将对象依据其年龄分配到不同的区域中去存储 ②对象间不可能是孤立的,对象间会存在跨代引用 ——跨代引用假说:跨代引用相对于同代引用仅占极少原创 2022-04-26 15:43:27 · 56 阅读 · 0 评论 -
3.2对象已死?
3.2对象已死? 1、对象死亡判定 ①引用计数算法:在对象里添加一个引用计数器。每当有一个地方引用它时计数器加一;当引用失效时计数器减一;任何时候当计数器值为零时对象被判定为死亡 优点:原理简单,判定效率高 缺点:无法解决两个本应该死亡的对象间相互引用的问题 ②可达性分析算法:通过一系列称为“GC ROOT”的根对象节点集,通过引用关系向下搜索,搜索过程中通过的路径称为“引用链”如果某个对象没有通过引用链与根节点相连接(即图论中的不可达),则证明此对象已经不能被使用 在JAVA技术体系中可固定作为GC原创 2022-04-27 11:20:25 · 63 阅读 · 0 评论 -
2.3 HotSpot虚拟机对象探秘
2.3 HotSpot虚拟机对象探秘 1、对象的创建 ①当虚拟机遇到一条自己吗new指令时首先会检查,这个指令参数是否能在常量池中定位到一个类的符号引用、并检查这个符号引用代表类是否已经加载、解析、初始化过、如果没有则需要先进行相应的类加载过程 ②为新生对象分配内存(对象所需内存大小在类加载之后就已经被确定) ③虚拟机堆对象进行必要的设置 ④执行初始化方法(构造方法),按照程序员的需求对对象进行初始化 2、Java堆内存划分 指针碰撞:Java堆中内存绝对规整,被使用过的内存放在一边,空闲的内存放在另一边原创 2022-04-25 17:17:15 · 999 阅读 · 0 评论 -
2.2 JAVA内存区域
2.2 JAVA内存区域 1、程序计数器 作用:当前线程所执行的字节码的行号指示器,用来选取下一条需要执行的字节码指令 每个线程独立拥有 不会出现任何OutofMemoryError 2、java虚拟机栈 作用:java方法执行的线程内存模型,每一个方法被调用直至执行完毕的过程,就对应着一个栈帧从入栈到出栈的过程 每个线程独立拥有 如果线程请求的栈深度大于虚拟机允许的深度就会抛出 StackOverFlowError 如果栈扩展时无法申请到足够的内存就会抛出OutofMemoryError 3、本地方法原创 2022-04-25 17:16:38 · 70 阅读 · 0 评论