GC-Collector调优------第一部分

本文深入探讨了Java虚拟机(JVM)中的垃圾回收(GC)机制,详细讲解了不同GC收集器的特性及调优策略,特别是针对多核CPU环境下GC对系统性能的影响。

内容源自Oracle《Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide》,文章主要是描述了GC在JVM运行中的意义,并且详细描述了在日常开发工作中如何选择、使用、调整Garbage Collection。(JDK11)
内容有些地方是纯理解的,并未实际验证,后期会对未验证的内容进行验证

  • HotSpot根据不同的用户的不同的需求,提供了各种各样的GC的实现。尽管针对于Java SE,HotSpot已经配备了比较合适的GC,但是针对不同的Java应用,这样的基础配置不一定是最优的选择
  • 关于GC的选择,会先叙述serial、stop-the-world GC-Collector的一些常用特性以及基本的调优。再然后会详细描述其它GC-Collector的特性,以及在选择这些GC-Collector的时候,需要考虑什么因素

关于Garbage Collection的三个问题

  • 什么是Garbage Collector?
  • 在选择使用Garbage Collector的关键是什么?

什么是Garbage Collector

  • 定义:Garbage Collector 的作用就是动态管理JVM内存

Garbage Collector为了实现JVM的内存管理做了五件事情

  • 对操作系统
    1. 从操作系统中获取和分配内存
    2. 将无用的内存返还给操作系统
  • 对Java应用
    1. 当Java应用需要内存的时候,分配内存
    2. 决定Java应用当前哪些内存需要被回收
    3. 收回无用的内存进行重新分配

GC在系统中的位置

GC-Collector在性能提升方面做的几件事情

  • 将分代思想应用于Heap内存中,根据对象是否可回收,什么时候可回收等因素将Heap分成了不同的年代。这样有助于针对不通的年代内存,采用不同的GC-Collector
  • 将多线程应用于耗时的回收操作,尽可能的减少该部分损耗的时间
  • 对内存进行压缩,解决内存分配过程中产生的内存碎片

选择GC-Collector的关键是什么?

  • 阿姆达尔定律阐述了,在计算机系统相关的性能调优的时候,关键在于降低调优对象中串行计算部分的时间损耗。不同的GC-Collector其大部分的特点都在于如何降低串行计算的部分(阿姆达尔定律
  • 下面的图表是不同的GC-Collector在不同的CPU数量的情况下,CPU吞吐量的统计的实验结果(实验假定了一个比较理想的情况,系统只在进行GC)
    1. 1%GC表示GC损耗占1%CPU时间的时候,CPU吞吐量随着CPU数量增加的时候的变化。CPU数量达到30的时候,CPU吞吐量损耗占比为20%
    2. 30%GC的时候,当CPU数量增加到30的时候,CPU吞吐量损耗占比达到了80%
      阿姆达尔定律
  • 上面的实验结果说明了几个问题
    1. 在单CPU系统中,GC损耗对于系统正常运行的影响微乎其微,但是当CPU数量越来越大(large-system),GC损耗就会成为系统正常运行的一个瓶颈
    2. 如果GC-Collector的串行计算部分提升一点点也会对系统的整体性能产生巨大的影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值