JVM—垃圾回收器

JVM—垃圾回收器

  • 串行
    • 单线程
    • 适合堆内存较小的个人电脑
  • 吞吐量优先
    • 多线程
    • 堆内存较大,多核CPU
    • 让单位时间内,stw的时间最短,回收每次回收事件长一点过,次数少一点
  • 响应时间优先
    • 多线程
    • 堆内存大,多核CPU
    • 尽可能让单次stw时间最短,回收次数多

串行垃圾回收器:

JVM参数: -XX:+UseSerialGC = Serial + SerialOld

某个线程A所需要的内存不够时,全部的线程都保存到某个安全点(SWT),然后线程A去执行垃圾回收操作.

吞吐量优先垃圾回收器:

JVM参数: -XX:+UseParallelGC ; -XX:+UseParallelOldGC

当某个线程内存不够时,全部线程保存某个安全点后,全不线程都去执行垃圾回收操作,尽可能多的回收内存.(吞吐量优先的垃圾回收器,默认情况下执行垃圾回收时CPU的占用率会达到100%)

其他参数:

-XX:+UseAdaptiveSizePolicy 自适应调Eden区和Survivor区的比例

-XX:+GCTimeRatio=tario 设置GC时间与程序运行总时间的占比

-XX:MaxGCPauseMillis=200ms 设置一次STW的的最大时间为200ms(默认值就是200ms)

响应时间优先(CMS):

JVM参数:-XX:+UseConcMarkSweepGC ~ -XX:+UseParNewGC ~ SerialOld

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QrVXANzo-1633872976929)(C:\Users\MMCC\AppData\Roaming\Typora\typora-user-images\1633871556860.png)]

如图: 老年代内存不足时进行垃圾回收,首先STW,由某个线程A进行垃圾初始标记(标记一些根),然后其他线程可以恢复运行,该线程A继续将垃圾标记剩下的垃圾,完成之后,由于并发标记的过程中用户线程可能还会产生垃圾,或者将某些引用进行了更改,所以需要再进行一次STW,全部的线程都进行垃圾标记.最后由线程A进行垃圾清理,其他线程正常运行.

其他参数:

-XX:ParallelGCThreads=n 并行的垃圾回收线程数量,并行就是全部线程进行垃圾回收,

-XX:ConcGCThreads=threads 并发垃圾回收线程数量,一般取线程数量的1/4,如上图只有一个线程为垃圾回收线程

eads 并发垃圾回收线程数量,一般取线程数量的1/4,如上图只有一个线程为垃圾回收线程`

-XX:CMSInitiatingOccupancyFraction=percent 当内存占用达到percent(默认值为80)时就要进行垃圾回收(注意不能时是内存占满了才进行),CMS在并发清理过程有用户线程在运行,用户线程便会产生新的垃圾,如果内存被占满了才进行垃圾回收,新产生的垃圾就没有空间存储(也可以说是用户线程所需要的运行的内存空间不够)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莽晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值