Update Java_虚拟机.md

This commit is contained in:
heibaiying 2019-12-23 17:41:26 +08:00 committed by GitHub
parent b391a4234a
commit c4d3198e5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -51,7 +51,7 @@
在 2017 年 JDK 9 发布后Oracle 公司宣布从此以后 JDK 将会在每年的 3 月和 9 月各发布一个大版本,即半年发行一个大版本,目的是为了避免众多功能被捆绑到一个 JDK 版本上而引发的无法交付的风险。
在 JDK 11 发布后Oracle 同时调整了 JDK 的商业授权,宣布从 JDK 11 起将以前的商业特性全部开源给 OpenJDK ,这样 OpenJDK 11 和 OracleJDK 11 的代码和功能,在本质上就是完全相同的。同时 Oracle 还宣布以后都会发行两个版本的 JDK
在 JDK 11 发布后Oracle 调整了 JDK 的商业授权,宣布从 JDK 11 起将以前的商业特性全部开源给 OpenJDK ,这样 OpenJDK 11 和 OracleJDK 11 的代码和功能,在本质上就是完全相同的。同时 Oracle 还宣布以后都会发行两个版本的 JDK
+ 一个是在 GPLv2 + CE 协议下由 Oracle 开源的 OpenJDK
+ 一个是在 OTN 协议下正常发行的 OracleJDK。
@ -249,8 +249,8 @@ System.gc();
当前大多数虚拟机都遵循 “分代收集” 的理论进行设计,它建立在强弱两个分代假说下:
+ **弱分代假说 (Weak Generational Hypothesis) **:绝大多数对象都是朝生夕灭的。
+ **强分代假说 (Strong Generational Hypothesis) **:熬过越多次垃圾收集过程的对象就越难以消亡。
+ **弱分代假说 (Weak Generational Hypothesis)**:绝大多数对象都是朝生夕灭的。
+ **强分代假说 (Strong Generational Hypothesis)**:熬过越多次垃圾收集过程的对象就越难以消亡。
+ **跨带引用假说 (Intergenerational Reference Hypothesis)**:基于上面两条假说还可以得出的一条隐含推论:存在相互引用关系的两个对象,应该倾向于同时生存或者同时消亡。
强弱分代假说奠定了垃圾收集器的设计原则:收集器应该将 Java 堆划分出不同的区域,然后将回收对象依据其年龄(年龄就是对象经历垃圾收集的次数)分配到不同的区域中进行存储。之后如果一个区域中的对象都是朝生夕灭的,那么收集器只需要关注少量对象的存活而不是去标记那些大量将要被回收的对象,此时就能以较小的代价获取较大的空间。最后再将难以消亡的对象集中到一块,根据强分代假说,它们是很难消亡的,因此虚拟机可以使用较低的频率进行回收,这就兼顾了时间和内存空间的开销。
@ -260,11 +260,9 @@ System.gc();
根据分代收集理论,收集范围可以分为以下几种类型:
+ **部分收集 (Partial GC)**:具体分为:
+ 新生代收集Minor GC / Young GC只对新生代进行垃圾收集
+ 新生代收集Minor GC / Young GC只对新生代进行垃圾收集
+ 老年代收集Major GC / Old GC只对老年代进行垃圾收集。需要注意的是 Major GC 在有的语境中也用于指代整堆收集;
+ 混合收集Mixed GC对整个新生代和部分老年代进行垃圾收集。
+ 混合收集Mixed GC对整个新生代和部分老年代进行垃圾收集。
+ **整堆收集 (Full GC)**:收集整个 Java 堆和方法区。
#### 3. 标记-清除算法
@ -315,7 +313,6 @@ HotSpot 虚拟机中一共存在七款经典的垃圾收集器:
分别介绍如下:
### 5.1 Serial 收集器