应用数据库网站开发,珠海视窗网,望野王绩拼音版,使用局域网做网站GC垃圾回收器
JVM在进行GC时#xff1a;并不是对这三个区域#xff08;新生区#xff0c;幸存区#xff08;from#xff0c;to#xff09;#xff0c;老年区#xff09;统一回收#xff0c;大部分时候#xff0c;回收都是新生区
GC两种类#xff1a;轻GC#xff…GC垃圾回收器
JVM在进行GC时并不是对这三个区域新生区幸存区fromto老年区统一回收大部分时候回收都是新生区
GC两种类轻GC普通的GC重GC全局的GC
GC题目 JVM的内存模型和分区详细到每个区放什么 堆里面的分区有哪些说说他们的特点
Edenfromto老年区
GC的算法有哪些
标记清除、标记整理压缩、复制算法、引用计数
轻GC和重GC分别在什么时候发生
GC常用算法
引用计数法
每一个对象都分配一个计数器计数器也会占用内存空间每当对象被调用一次计数器便加1当需要GC时GC会查找被调用最少次的对象将其淘汰。
该方法用的较少因为一个大型项目或者循环创建对象时计数器占用的空间将会变得非常大。
可达性分析
把对象之间的关系理解为一个树状结构从某一起点出发能够遍历到达的对象称之为“可达”把无法到达的地方称之为“不可达”将不可达的对象作为垃圾
可达性分析的关键要点为进行上述遍历需要有“起点”(GC Roots)起点可以是
栈中的局部变量常量池中引用的对象方法区中静态成员引用的对象
缺点
消耗许多时间在扫描上而某个对象成为了垃圾不一定能够第一时间发现如果在扫描过程中对象的引用关系发生了变化则会导致错误因此为了更准确地扫描需要让其他业务线程暂停工作这又会导致效率降低
复制算法
每次GC都会将Eden活的多项移到幸存区中一旦Eden区被GC后就会是空的幸存0区与幸存1区两个区域有一个是from有一个是to且保证to为空。当幸存0区与幸存1区都有对象时则将对想法少的区中的对象复制移动到另一个区并将其标志为to从Eden区来的对象都优先去to新生区主要使用的就是复制算法
好处没有内存碎片
坏处浪费了一个幸存区的空间多了一半的空间一直是空的在极端情况下from区满了需要全部复制到to区十分浪费资源
复制算法最佳使用场景地点新生区情况在对象存活度较低 此时使用复制算法最佳
标记清除算法
扫描所有对象对活着的对象进行标记对没有被标记的对象进行清除
缺点产生内存碎片需要两次扫描严重浪费时间
优点不需要额外的空间
标记压缩算法 对标记清除算法的再次优化 扫描所有对象对活着的对象进行标记对没有被标记的对象进行清除压缩内存将活着的对象向一段移动清除内存碎片
缺点又多了一个移动成本
优点不会产生内存碎片
标记清除压缩算法
结合标记清除算法与标记压缩算法
先清理五次再进行压缩
总结
内存效率复制算法标记清除算法标记压缩算法时间复杂度
内存整齐度复制算法标记压缩算法标记清除算法
内存利用率标记压缩算法标记清除算法复制算法
GC:分代收集算法
年轻区
存活率低复制算法
老年区
区域大存活率高标记清除内存碎片不是太多的情况下标记压缩内存碎片太多就压缩混合实现