文章分类 - jvm
摘要:目录 1.类加载过程一:装载(Loading) 2.类加载过程二:链接(Linking) 3.类加载过程三:初始化(Initialization) 1.类加载过程一:装载(Loading) 类加载分为加载、链接、初始化三步。类的加载过程说明:1.加载通过类的全限定名获取此类的二进制字节流。2.将字节
阅读全文
摘要:目录 1.常用的显示GC日志的参数 2.图解垃圾`GC`日志(重要) 3.日志分析工具的使用 1.常用的显示GC日志的参数 解释:日志中,GC和Full GC表示的是GC的类型。GC只在新生代进行,Full GC包括新生代和老年代、方法区。Allocation Failure:GC发生的原因,一般新
阅读全文
摘要:目录 1.七款垃圾收集器的总结 2.垃圾收集器的组合关系 3.怎么选择垃圾收集器? 1.七款垃圾收集器的总结 新生代的垃圾回收器都是使用的复制算法(S0区和S1区),老年代的垃圾收集器使用的算法是标记-压缩和标记清除算法,只有CMS使用的是标记-清除算法,其他的老年代收集器都是使用的标记-压缩算法。
阅读全文
摘要:目录 1.G1回收过程一(`Young GC`) 2.G1回收过程二(`并发标记过程`) 3.G1回收过程三(`混合回收`) 4.G1回收过程四(Full GC`) - 非必须 1.G1回收过程一(Young GC) 如下图所示,画红色对勾的区域表示的是,在进行YGC的时候,Eden区中存活的对象以
阅读全文
摘要:目录 1.记忆集(`remembered set`) 1.记忆集(remembered set) 问题:G1将堆区划分成多个region,一个region不可能是独立的,它其中存储的对象可能被其他任意region(这些region可能Old区或者Eden区)中的对象所引用。这样一来,在进行YGC的时
阅读全文
摘要:目录 1. `Region`的介绍 2.`G1`垃圾收集器的主要回收环节 1. Region的介绍 G1收集器,默认将Java堆划分成约2048个大小相同的独立的Region块,每一个Region块大小根据堆空间的时间大小来决定,范围控制在1MB到32MB之内。所有的Region大小相同,且在JVM
阅读全文
摘要:目录 1.`G1`概述 2.`G1`的优势与缺点 3.`G1`参数设置 4.`G1`使用场景 1.G1概述 为什么有了前面几个强大的垃圾收集器,还需要Garbage First(G1) GC?随着应用程序所应对的业务越来越庞大、复杂,前面几款垃圾收集器已经不能满足实际的需要,所以出现了G1。 G1是
阅读全文
摘要:目录 1.`Serial`与`Serial Old`垃圾回收器 - 串行回收 2.`ParNew`垃圾收集器 - 并行回收 3.`Paralell Scavenge(吞吐量优先)`与`Parallel Old`垃圾收集器 - 吞吐量优先 4.`CMS`垃圾收集器 - 低延迟 1.Serial与Ser
阅读全文
摘要:录 1.七款经典的垃圾收集器 2.垃圾收集器之间组合关系 3.查看默认的垃圾收集器 1.七款经典的垃圾收集器 经典的垃圾回收器又如下7种:如下图所示,是经典的垃圾回收器和垃圾分代之间的关系。Serial GC、Parallel Scavenger GC以及ParNew GC只能收集年轻代。Seria
阅读全文
摘要:目录 1.垃圾回收器的分类 2.`GC`性能指标 3.吞吐量和暂停时间对比 1.垃圾回收器的分类 按垃圾回收器的线程数分:分为串行和并行垃圾回收器。串行垃圾回收器只有一个垃圾回收线程,并行垃圾回收器有多个垃圾回收线程。需要注意的是:串行以及并行垃圾回收器在回收垃圾的时候,都会Stop the Wor
阅读全文
摘要:目录 1.`Java`中几种不同的引用-强软弱虚概述 1.1 强引用 1.2 软引用 1.3 弱引用 1.4 虚引用 1.Java中几种不同的引用-强软弱虚概述 java中的引用分为4种,强引用、软引用、弱引用、虚引用,引用强度依次逐渐减弱,都继承自Reference类 四种引用概述强引用:最传统的
阅读全文
摘要:目录 1.并行与并发 2.垃圾回收的并行与并发 3.安全点与安全区域 1.并行与并发 并行 并发 对比 2.垃圾回收的并行与并发 垃圾回收并行:指的是多条垃圾收集线程并行工作,但此时用户线程处于等待状态。 垃圾回收并发:用户线程和垃圾回收线程同时执行,但不一定是并行的,可能会交替执行,垃圾回收线程在
阅读全文
摘要:目录 1.`System.gc()`的理解 2.内存溢出 3.内存泄漏 4.`Stop the World` 1.System.gc()的理解 显示调用System.gc()会建议垃圾回收器进行Full GC 注意只是建议,并不一定会真的进行Full GC 2.内存溢出 内存溢出要么是程序有问题导致
阅读全文
摘要:目录 1.分代收集算法 2.增量收集算法 3.分区收集算法 1.分代收集算法 前面讲到的标记-清除算法、复制算法、标记-压缩算法,都有优缺点,没有一种算法是最好的。 JAVA将堆分为新生代和老年代,这样可以根据各个年代的特点的不同使用不同的算法。 在新生代中使用复制算法,在老年代中使用标记-清除算法
阅读全文
摘要:目录 1.标记-清除算法 2.复制算法 3.标记-压缩算法 4.3种算法的对比 当成功区分出内存中的存活对象和死亡对象后,GC接下来的任务就是垃圾回收,释放掉无用对象所占用的内存空间,以便有足够的可用空间为新对象分配内存。目前JVM中有3种常见的垃圾收集算法:标记-清除算法、复制算法、标记-压缩算法
阅读全文
摘要:目录 1.使用`MAT`查看`GC Roots` 2.使用`JProfiler`查看`GC Roots` 1.使用MAT查看GC Roots MAT简介下载:https://www.eclipse.org/mat/downloads.php 生成dump文件的两种方式a)使用jmap命令b)使用JV
阅读全文
摘要:目录 1.对象的`finalization`机制 1.对象的finalization机制 Java提供了finalization机制来允许开发人员提供对象销毁之前自定义处理逻辑。 垃圾回收一个对象之前,总会先调用这个对象的finalize()方法 finalize()方法是Object类中定义的,允
阅读全文
摘要:目录 1.引用计数算法 2.可达性分析算法 垃圾标记阶段算法包括引用计数算法和可达性分析算法。 在进行垃圾回收之前,需要判断哪些对象是存活对象,哪些是死亡对象,只有被标记为死亡的对象才能够被回收。 当一个对象已经不再被任何的存活对象继续引用的时候,就可以宣判为已经死亡。 判断对象是否存活一般有两种方
阅读全文
摘要:目录 1.什么是垃圾?为什么需要GC? 2.了解早期的垃圾回收机制 3.`Java`内存回收机制 GC很重要,大厂面试都会问。下面是面试的一些题目。 1.什么是垃圾?为什么需要GC? 1.没有任何指针指向的对象就是垃圾。2.垃圾需要及时被清理,如果一直不对其进行清理,这些垃圾对象所占用的空间和会一直
阅读全文
摘要:目录 1.`intern`方法解释 2.`new String()`到底创建了几个对象 3.`intern()`面试难题 4.`intern()`总结 5.`intern()`练习题 6.`intern()`空间效率 1.intern方法解释 1.任意的字符串调用String.intern()方法,
阅读全文