1.Serial的使用
Serial 收集器是最基本、历史最悠久的垃圾收集器了,JDK1.3 之前回收新?代唯?的选择。Serial 收集器作为 HotSpot 中 Client 模式下的默认新?代垃圾收集器。
Serial 收集器采?复制算法、串?回收和 "Stop- the-World" 机制的?式执?内存回收。
除了年轻代之外,Serial 收集器还提供?于执??年代垃圾收集的 Serial Old 收集器。Serial Old收集器同样也采 ?了串?回收和 "Stop the World" 机制,只不过内存回收算法使?的是标记-压缩算法。
Serial Old是运?在 Client 模式下默认的?年代的垃圾回收器
Serial Old 在 Server 模式下主要有两个?途:
???????? ① 可以与新?代的 Parallel Scavenge 配合使?。
???????? ② 作为?年代 CMS 收集器的后备垃圾收集?案,是?级垃圾回收器?法?作时的保底策略。
这个收集器是?个单线程的收集器,但它的 “单线程” 的意义并不仅仅说明它只会使??个 CPU 或?条收集线 程去完成垃圾收集?作,更重要的是在它进?垃圾收集时,必须暂停其他所有的?作线程,直到它收集结束 (Stop The World)
Serial回收器的优势与设置参数优势:简单??效(与其他收集器的单线程?),对于限定单个 CPU 的环境来说, Serial 收集器由于没有线程交互的开销,专?做垃圾收集?然可以获得最?的单线程收集效率。
在?户的桌?应?场景中,可?内存?般不?(?? MB ??两百 MB),可以在较短时间内完成垃圾收集(?? ms ??百多个ms),只要不频繁发?,使?串?回收器是可以接受的。
在 HotSpot 虛拟机中,使? -XX: +UseSerialGC 参数可以指定年轻代和?年代都使?串?收集器等价于新?代? Serial GC, 且?年代? Serial Old GC。
案例:
代码:
public class SerialGC {
private static int size = 1024 * 256;
public static void main(String[] args) {
for (int i = 0; i < 33; i++) {
byte[] allo = new byte[size];
}
}
}
jvm参数:
-Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintGCTimeStamps -
XX:SurvivorRatio=8
执??志:
0.133: [GC (Allocation Failure) 0.133: [DefNew: 8105K->378K(9216K), 0.0015472 secs]
8105K->378K(19456K), 0.0016135 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
Heap
def new generation total 9216K, used 2751K [0x00000007bec00000, 0x00000007bf600000,
0x00000007bf600000)
eden space 8192K, 28% used [0x00000007bec00000, 0x00000007bee51258,
0x00000007bf400000)
from space 1024K, 36% used [0x00000007bf500000, 0x00000007bf55eb78,
0x00000007bf600000)
to space 1024K, 0% used [0x00000007bf400000, 0x00000007bf400000,
0x00000007bf500000)
tenured generation total 10240K, used 0K [0x00000007bf600000, 0x00000007c0000000,
0x00000007c0000000)
the space 10240K, 0% used [0x00000007bf600000, 0x00000007bf600000,
0x00000007bf600200, 0x00000007c0000000)
Metaspace used 3079K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 337K, capacity 388K, committed 512K, reserved 1048576K