From ee032c539eba6ec15b1ea43cb5dbccd0ca2b288f Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 15 Apr 2018 17:09:15 +0800 Subject: [PATCH] auto commit --- notes/Java 虚拟机.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index 6fc0432f..cf9a8bbc 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -154,7 +154,7 @@ Object obj = new Object(); 用来描述一些还有用但是并非必需的对象。 -在系统将要发生内存溢出异常之前,将会对这些对象列进回收范围之中进行第二次回收。 +在系统将要发生内存溢出异常之前,会将这些对象列进回收范围之中进行第二次回收。 软引用主要用来实现类似缓存的功能,在内存足够的情况下直接通过软引用取值,无需从繁忙的真实来源获取数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真正的来源获取这些数据。 @@ -224,7 +224,13 @@ finalize() 类似 C++ 的析构函数,用来做关闭外部资源等工作。 1. 标记和清除过程效率都不高; 2. 会产生大量碎片,内存碎片过多可能导致无法给大对象分配内存。 -### 2. 复制 +### 2. 标记 - 整理 + +

+ +让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。 + +### 3. 复制

@@ -234,12 +240,6 @@ finalize() 类似 C++ 的析构函数,用来做关闭外部资源等工作。 现在的商业虚拟机都采用这种收集算法来回收新生代,但是并不是将内存划分为大小相等的两块,而是分为一块较大的 Eden 空间和两块较小的 Survior 空间,每次使用 Eden 空间和其中一块 Survivor。在回收时,将 Eden 和 Survivor 中还存活着的对象一次性复制到另一块 Survivor 空间上,最后清理 Eden 和 使用过的那一块 Survivor。HotSpot 虚拟机的 Eden 和 Survivor 的大小比例默认为 8:1,保证了内存的利用率达到 90 %。如果每次回收有多于 10% 的对象存活,那么一块 Survivor 空间就不够用了,此时需要依赖于老年代进行分配担保,也就是借用老年代的空间。 -### 3. 标记 - 整理 - -

- -让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。 - ### 4. 分代收集 现在的商业虚拟机采用分代收集算法,它根据对象存活周期将内存划分为几块,不同块采用适当的收集算法。