theme: channing-cyan
这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战
不同于
C++
语言,Java
语言具有自动的垃圾回收机制,我们一般不需要关注垃圾的回收。但JVM提供了多种垃圾回收算法、多种垃圾回收策略,不同的算法和策略适用于不同的业务场景。我们应该根据不同的场景选定合适的算法和策略,这样才能充分利用系统的性能。这篇文章带先带 大家走进垃圾回收策略、垃圾回收算法、具体的垃圾回收器。
一、垃圾回收策略遵循原则
在CPU
使用率高的情况下,我们肯定希望让CPU
执行更多的业务,而不是去消耗去执行垃圾回收。需要注意的时,如果我们高频的GC,甚至会有STW
发生,造成程序运行的卡顿。所以在这种场景下,我们应该降低GC的频率。
在对内存苛刻的要求的情况下,我们肯定是要尽可能的多回收一些对象占据的空间,腾出更多的内存。所以在这种场景下,我们应该提高对象的回收效率。
二、垃圾回收发生所在地
对于了解JVM内存结构的同学很清楚的知道,虚拟机栈、本地方法栈、程序计数器是线程私有的,它会随着线程的创建而创建,随着线程的销毁而销毁,并且栈里面的栈帧还会随着执行方法的进度进度入栈和出栈的操作。基于此,所以我们不需要对这三块内存区域考虑垃圾回收。
所以对于垃圾回收,我们需要考虑的是线程之间贡献的区域,包括堆、方法区。其中堆是我们考虑的重中之中,我们要适实地回收创建的对象。方法区我们主要回收常量和使用到的类。
没看够,请跳转到下一篇文章JVM | 垃圾回收策略(二)