摘要: JAVA 年轻代收集器 继续上一篇博文所讲的,STW即GC时候的停顿时间,他会暂停我们程序中的所有线程。如果STW所用的时间长而且次数多的话,那么我们整个系统稳定性以及可用性将大大降低。 因此我们在必要的时候需要对虚拟机进行调优,调优的主要目标之一就是降低STW的时间,也就是减少Full GC的次数 阅读全文
posted @ 2018-09-03 18:03 随风落木 阅读(1) 评论(0) 推荐(0) 编辑
摘要: JVM进阶(八)——Stop The World(停顿类型STW) 小伙伴还记得上一篇中我们留下的一个问题吗?什么是停顿类型!经过前几章的学习,我们知道垃圾回收首先是要经过标记的。对象被标记后就会根据不同的区域采用不同的收集方法。看上去很完美的一件事情,其实并不然。 大家有没有想过一件事情,当虚拟机 阅读全文
posted @ 2018-09-03 18:02 随风落木 阅读(38) 评论(0) 推荐(0) 编辑
摘要: JVM进阶(七)——从GC日志分析堆内存 在前面的文章中,我们只设置了整个堆的内存大小。但是我们知道,堆又分为了新生代,年老代。他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比例大小能改变吗?其实这些都是可控的,以前没有讲到是因为就算讲了也只是讲讲而已,看不到实质性的东西。 阅读全文
posted @ 2018-09-03 17:29 随风落木 阅读(6) 评论(0) 推荐(0) 编辑
摘要: JVM进阶(六)——鲜为人知的二次标记 上一章我们讲到了标记,但是不是被标记了就肯定会被回收呢?不知道小伙伴们记不记得Object类有一个finalize()方法,所有类都继承了Object类,因此也默认实现了这个方法。 finalize()方法:在该对象被回收之前,该对象的finalize()方法 阅读全文
posted @ 2018-09-03 16:29 随风落木 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 前言 堆分为年轻代和年老代。永久代是非堆内存,它又叫做方法区(一般的说法),主要存储已被加载的类信息、常量、静态变量。而该区域在java8已被删除,取而代之的是元空间,我会在后面的章节细讲。 什么是标记?怎么标记? 第一个问题相信大家都知道,标记就是对一些已死的对象打上记号,方便GC清理。 至于怎么 阅读全文
posted @ 2018-09-03 16:28 随风落木 阅读(14) 评论(0) 推荐(0) 编辑
摘要: JVM进阶(四)——利用MAT排查堆溢出 堆已经讲得差不多啦,这章我们以一个例子来说说如何设置以及当发生堆溢出的时候怎么排查问题。先看一小段代码: 代码中使用了一个无限循环来为list添加对象,如果采用默认的堆大小的话可能要等待好久才能出现堆溢出的错误,因此我们要将其设置小一点: -Xms10m - 阅读全文
posted @ 2018-09-03 16:07 随风落木 阅读(1) 评论(0) 推荐(0) 编辑
摘要: JVM进阶(三)——内存分配与回收策略 各位小伙伴大家好,还记得上一博文《JVM进阶(二)——初识JAVA堆》我们讲了什么吗?虚拟机中的堆,他是整个内存模型中占用最大的一部分,而且不是连续的。当有需要分配内存的时候,一般有两个方法分配,指针碰撞和空闲列表。该部分的内存回收是由虚拟机的垃圾收集器GC进 阅读全文
posted @ 2018-09-03 14:38 随风落木 阅读(1) 评论(0) 推荐(0) 编辑