其他分享
首页 > 其他分享> > 关于Jvm相关问题梳理(一)

关于Jvm相关问题梳理(一)

作者:互联网

1.Jvm如何判断内存对象是否需要回收?

通过引用计数法和可达性分析算法.
引用计数: 引用计数来判断对象的重要程度, 如果对象被引用计数就加1, 去除引用-1, 为0则回收. 缺点: 无法解决对象的循环引用
可达性分析算法: 确定一系列根对象(GC Roots),并从根对象为起点根据对象之间的引用关系搜索出一条引用链(Reference Chain),在引用链的对象就存活,而不在引用链的对象就认定为可回收对象。

2. 哪些垃圾需要回收?

方法区中类静态属性引用的对象(static关键字声明的字段)
方法区中常量引用的对象,(也就是final关键字声明的字段)
本地方法栈中引用的对象(native方法)
虚拟机栈中引用的对象(正在运行的方法使用到的变量、参数等)
Java虚拟机内部的引用。(系统内部的东西当然能作为根了)

3. GC垃圾回收算法有哪些

标记-清除, 标记-整理, 标记-复制
标记-清除: 标记所有需要回收的对象, 然后将标记的部分清除掉. 缺点: 产生内存碎片化问题
标记-移动: 标记需要移动的对象, 将标记的部分移动到未被使用的空间, 然后将除这个空间外的所有对象清除. 缺点: 需要更新引用, 效率降低
标记-复制: 将内存分为两块. 将正在使用的内存对象并全部复制到未被使用的内存块中, 然后将正在使用中内存块对象全部清除 缺点: 需要双倍空间, 拿空间换效率

4. 内存回收的过程(分代垃圾回收)

内存分为: 新生代和老年代. 新生代包括: 伊甸区, 幸存区from, 幸存区to
a.伊甸区每次满了以后会进行 MinorGC, 使用垃圾回收算法是标记复制算法, 然后存活下来的对象进入幸存区to, 然后幸存区to 会和幸存区 from 进行交换, 保证幸存区to 始终是空的.
b.进入幸存区的对象会被标记, 标志他们抗住多少次 MinorGC. 当标记达到默认值15时, 会将幸存区的对象放入老年代中, 不轻易进行回收.
c.如果老年代满了以后则会进行 FullGC, 使用的是标记整理或者标记清除算法


标签:标记,对象,内存,回收,幸存,引用,Jvm,梳理,关于
来源: https://www.cnblogs.com/TimePause/p/14860193.html