三色标记 cms核心算法
文章目录
cms的核心算法三色标记法
三色标记法: 逻辑上的抽象,将对象分为3种颜色, 黑色,表示 已经标记完成,确认不是垃圾,灰色自己标记完成了,但是成员还没有标记完。 白色 : 没有标记完
cms 通过 增量 increment update 的方式解决漏标的问题。
cms 的过程
- 初始标记: 直接stop the world 标出根引用的对象。
- 并发标记: 继续标记其他对象,与应用程序是并发执行的。
- 重新标记: stop the world 对并发标记阶段的对象重新标记,解决漏标的问题。
- 并发清除: 并行,对产生的垃圾清除。 清除过程中,应用程序不断产生新的垃圾,这些垃圾被称为浮动垃圾,将会在下次 GC 过程中进行清除。
G1收集器的过程
garbage first 收集器, 他的内存模式实际上是部分带的,但是逻辑上是分代的。 在内存中,对于堆内存就不在分老年代和新生代,而是划分为一个个小内存块,region,每个region 可以隶属于不同的年代
四个阶段:
- 初始标记, 标 GCROOT 直接引用的那些对象。
- 标记 region,通过 RSet标记出上一个阶段标记的Region 引用到 的 Old区 region
- 并发标记阶段: 跟 CMS 的步骤差不多。 只是遍历的范围不再是整个 Old区,而只是需要遍历第二步标记出来的 region
- 重新标记: 跟CMS 的重标记差不多,解决漏标问题。
- 垃圾清理【复制算法】,与CMS 不同,G1直接用拷贝算法,直接将整个堆的对象拷贝 到另一个 region。 而 这个阶段,G1 只选择垃圾较多的region 进行拷贝
那些可以作为 GC ROOT
- 引用计数: 这种方式是给堆内存当中的每个对象记录一个引用个数, 引用个数为0 的就认为是垃圾,这是早期JDK 使用 的方式, 引用计数无法解决循环引用问题。
- 可达性分析: 这种方式就是在内存中,从引用根对象一直向下查找引用, GC ROOT: 栈, 本地方法栈, class类, 运行时常量池,static reference 静态引用。
如何进行 JVM 调优,jvm参数有哪些?
跑了一段java程序,一段时间后,服务器非常的卡顿,如何进行优化。
- 定制 JVM 运行参数来提高 JAVA 应用的运行数据
- 标注之类: -开头表示所有 hotspot 都支持的参数,用 java -help 打印
- 非标准之类, -x开头,通常是特定的 hotspot 版本对应的。
京东二面
说说类加载器双亲委派模式
JVM 中存在的三个默认的类加载器:
- BootstrapClassLoader
- ExtClassLoader
- AppClassLoader
JVM 在加载一个类时候,会调用AppClassLoader 的 loadClass
方法来加载这个类, 不过这个方法中, 会先使用 ExtClassLoader 的 loadClass 方法来加载类看,同样 ExtClassLoader 的 loadClass
方法中会先使用 BootstrapClassLoader 来加载类,如果 bootstrapClassLoader 加载成功,就直接成功,如果失败,没加载到类,就ExtclassLoader 尝试加载,如果没有加载到,就 AppClassLoader 加载这个类
双亲是 指的是 ExtClassLoader 和 BootstrapClassLoader ,委派这2个 亲人加载。
泛型 extends 和 super区别
<? extends T
> 表示包括T在内的任何 T的子类<? super T>
表示 T 还有 T 的父类
第3种单例模式
- 懒汉式单例
- 饿汉式单例
- 枚举单例
- 枚举单例一定要会,笔试居然刷到了
|
|
文章作者 LYR
上次更新 2021-08-17