深入分析CMS垃圾收集器原理

前文已经讲过,CMS是老年代垃圾收集器,在收集过程中可以与用户线程并发操作。它可以与Serial收集器和Parallel New收集器搭配使用。CMS牺牲了系统的吞吐量来追求收集速度,适合追求垃圾收集速度的服务器上。 CMS相关参数 | 参数 | 类型 | 默认值 | 作用 | | ----------------------------------- | ------- | -------------------------------------------- | ------------------------------------------------------------ | | -XX:+UseConcMarkSweepGC | boolean | false | 老年代采用CMS收集器收集 | | –XX:ParallelGCThreads=n | int | (ncpus »

JVM深入理解-垃圾回收

前言 最近线上出现了JVM 频繁FGC的问题,查询了很多GC相关的资料,做了一些整理翻译。文章比较长可以收藏后慢慢阅读。 一、什么是垃圾回收?(Garbage Collection) 一个垃圾回收器有一下三个职责 分配内存 确保有引用的对象能够在内存中保留。 能够在正在执行的代码环境中回收已经死亡对象的内存。 这里提到的有引用是指存活的对象,后面会提到一些算法用来判断对象是否存活。不在有引用的对象将被认为是死亡的,也就是常说的垃圾garbage。找到并释放这些垃圾对象占用的空间的过程就被称作是垃圾回收garbage collection。 垃圾回收可以解决很多内存分配的问题,但并不意味这全部。 比如:你可以不断地创建对象并保持对它们的引用直到没有可用的内存分配。垃圾回收本身就是一项非常复杂和消耗资源的过程。 二、 »

JVM深入理解-内存物理结构&类加载

背景 对于JVM这块儿的知识,我估计大部分的都是只有在需要面试的时候才会拿出来复习一下,然后就又放下来。也是因为这块儿是Java最底层的部分,非常难懂。其实如果真的说认真、细心的去撸一下,了解透彻,应该就不会那么容易忘记。 今天的主要目的也是根据Oracle的官方文档来一步一步的理解与学习,并且用用一些demo来验证理论。 Java虚拟机内存结构 我们先来看一下JVM一个大概的物理结构图(请注意,不叫内存模型): 堆的划分 我们首先看一下官方地址对于运行时数据区域的一个划分:https://docs.oracle.com/javase/specs/jvms/se8/ »