标签:标记 对象 内存 回收 幸存 引用 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。