jvm随笔-生活工作点滴

JVM的内存结构、垃圾回收算法和垃圾收集器的详解

2019-07-11  本文已影响48人  初晨的笔记

运行时数据区(Run-Time Data Areas)

运行时数据区

Java的内存结构

JVM内存结构

常用JVM配置参数

垃圾回收算法

1. 什么是垃圾?

简单来说就是内存中不可能再被使用到的对象空间就是垃圾。

2 如何确定一个对象是垃圾?可以回收

Java中可以作为GC Roots对象有:

3. 常用的垃圾回收算法

复制算法

java堆从GC角度还可以细分为:新生代(Eden区,From Survivor区和To Survivor区,占用1/3的堆空间)和老年代(占据2/3的堆空间)。

Minitor GC的过程(复制-清空-互换)
Eden、SurvivorFrom复制到SurvivorTo,年龄+1;

    优点:整体复制,没有产生内存碎片。
    缺点:浪费空间,大对象复制会耗时。
标记清除

先标记出要回收的对象,再统一回收这些要清除的对象。

  优点:没有大面积的复制,节约内存空间
  缺点:产生内存碎片。
标记整理

标记要回收的对象,再次扫描,并往一端滑动存活的对象。

  优点:没有内存碎片,可以使用bump.
  缺点:移动存活对象的成本,耗时间。

主流的三种算法各有优缺点,综合来看,使用分代收集,复制算法用于年轻代,标记清除,标记整理用于老年代。

GC垃圾回收算法和垃圾收集器的关系?

GC算法(引用计数,复制,标记整理,标记清除)是内存垃圾回收的方法论。垃圾收集器就是GC算法的落地实现。

因为目前为止还没有出现完美的垃圾回收器出现,更加没有万能的收集器,只有针对具体的应用最合适和垃圾回收器,进行分代收集。

4种主要的垃圾收集器
如何选用合适的垃圾收集器?

组合的选择:
1、单核的CPU或者小内存,单机程序
-XX:UseSerialGC

2、多CPU,需要最大吞吐量,如后台计算型应用
-XX:UseParallelGC 或者-XX:UseParallelOldGC

3、多CPU,追求最小停顿时间,最快速响应,如互联网应用
-XX:+UserConcMarkSweepGC
-XX:+ParNewGC

参考链接:JVM官方规范

上一篇 下一篇

猜你喜欢

热点阅读