黑马程序员技术交流社区

标题: 【上海校区】就业: 垃圾收集器以及内存分配 [打印本页]

作者: 执迷不悟    时间: 2020-4-22 17:44
标题: 【上海校区】就业: 垃圾收集器以及内存分配
本帖最后由 执迷不悟 于 2020-4-22 17:45 编辑

                               垃圾收集器以及内存分配

垃圾收集器包括:串行垃圾收集器、并行垃圾收集器、CMS(并发) 垃圾收集器、G1垃圾收集器。

1、串行垃圾收集器
串行垃圾收集器,是指使用单线程进行垃圾回收,垃圾回收时,只有一个线程在工作,并且java应用中所有的线程都要暂停,等待垃圾回收完成。这种现象称为STW(stop-the-world)
对于交互性比较强的应用是不能接受这种垃圾收集器。
一般在javaweb应用中是不会使用这种垃圾收集器。
1.1、设置垃圾回收为串行化收集器
在程序运行参数中添加参数,如下:
运行日志如下:
[Shell] 纯文本查看 复制代码
  [GC (Allocation Failure) [DefNew: 4416K->512K(4928K), 0.0046631 secs] 4416K->2070K(15872K), 0.0078718 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
  ​
  [Full GC (Allocation Failure) [Tenured: 10944K->3297K(10944K), 0.0093590 secs] 15871K->3297K(15872K), [Metaspace: 3374K->3374K(1056768K)], 0.0093969 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
GC日志信息解读:
年轻代的内存GC前后的大小:
2、并行垃圾收集器
并行垃圾收集器在串行垃圾收集器的基础上做了改进,将单线程改为多线程进行垃圾回收,这样可以缩短垃圾回收的时间(这里指的是并行能力较强的机器),并行垃圾收集器,在收集过程中也会STW(暂停应用程序)
2.1、ParNew垃圾收集器
ParNew垃圾收集器是工作在年轻代上的,只是将串行的垃圾收集器修改为了并行
通过-XX:+UseParNewGC参数设置年轻代使用ParNew收集器,老年代依然使用串行化垃圾收集器
[Shell] 纯文本查看 复制代码
  #运行参数:
  -XX:+UseParNewGC -XX:+PrintGCDetails -Xms16m -Xmx16m
  ​
  #日志
  [GC (Allocation Failure) [ParNew: 4416K->512K(4928K), 0.0018376 secs] 4416K->2170K(15872K), 0.0025611 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

2.2、ParallelGC垃圾收集器
ParallelGC收集器工作机制和ParNew垃圾收集器工作机制是一样的,只是在这个基础上添加了两个和系统吞吐量相关的参数,使用起来更加灵活和高效。
相关参数如下:
[Shell] 纯文本查看 复制代码
 #参数
  ‐XX:+UseParallelGC ‐XX:+UseParallelOldGC ‐XX:MaxGCPauseMillis=100 ‐
  XX:+PrintGCDetails ‐Xms16m ‐Xmx16m
  ​
  #打印的信息
  [GC (Allocation Failure) [PSYoungGen: 4096K‐>480K(4608K)] 4096K‐
  >1840K(15872K), 0.0034307 secs] [Times: user=0.00 sys=0.00, real=0.00
  secs]
  [Full GC (Ergonomics) [PSYoungGen: 505K‐>0K(4608K)] [ParOldGen: 10332K‐
  >10751K(11264K)] 10837K‐>10751K(15872K), [Metaspace: 3491K‐
  >3491K(1056768K)], 0.0793622 secs] [Times: user=0.13 sys=0.00, real=0.08
  secs]
有以上信息可以看出,年轻代和老年代都使用了ParallelGC垃圾回收器。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2