Core Issue of GC

垃圾回收的理念确实非常棒,但判断一个垃圾回收算法和垃圾回收器优劣应该有以下几个标准.

应用程序暂停的时间

#STW 砸瓦鲁多
是GC中的一个专有名词,特指为了使得内存状态稳定,需要将所有应用线程全部停下,这期间GC线程进行工作.
短暂的STW可能不会让用户察觉到,但长时间的STW会导致极差的用户体验,是一个GC算法和收集器应该极力避免的.

即一次GC所导致的 #STW 时间应该尽量少.
例如 #ZGC 收集器的最高 #STW 时间不超过10ms

应用程序吞吐量

#throughput

在单位时间内, #STW 的总时间应该尽量少.
某种收集器可能单次GC时间特别短,但由于每次只是回收了非常少量的内存,导致需要非常频繁的进行GC,而总共消耗的时间可能反而非常大.
这样的话留给应用程序线程的时间可能还不如那种 #STW 大,而一次性把垃圾都回收干净的收集器了.

内存利用率

#utility

某些收集器会对堆内存进行分区或者分代,而分割后的内存每次只能利用其中一部分,如果分割比例不够好或算法不优的话会导致内存的利用率不高.
我们尽量希望提高内存利用率.

另外,某些收集器会使用额外的内存来记录更多信息,以提高收集性能,这些额外的内存也会占用堆内存,使得我们真正在应用程序中能使用的内存量降低.这也是需要取舍的.

正确回收

#correctgc

字面意思就是,应该回收的东西就要进行回收,不该回收的东西就应该保留着.


Core Issue of GC
https://rug.al/2021/2021-09-26-core-issue-of-gc/
Author
Rugal Bernstein
Posted on
September 26, 2021
Licensed under