一文理解JVM虚拟机(内存、垃圾回收、性能优化)解决面试中遇到问题
新生代由于其对象存活时间短,且需要经常gc,因此采用效率较高的复制算法,其将内存区分为一个eden区和两个suvivor区,默认eden区和survivor区的比例是8:1,分配内存时先分配eden区,当eden区满时,使用复制算法进行gc,将存活对象复制到一个survivor区,当一个survivor区满时,将其存活对象复制到另一个区中,当对象存活时间大于某一阈值时,将其放入老年代。老年代和永久代因为其存活对象时间长,因此使用标记清除或标记整理算法 总结: 新生代:复制算法(新生代回收的频率很高,每次回收的耗时很短,为了支持高频率的新生代回收,虚拟机可能使用一种叫做卡表(Card Table)的数据结构,卡表为一个比特位集合,每个比特位可以用来表示老年代的某一区域中的所有对象是否持有新生代对, 2.7 垃圾回收器 垃圾回收器的任务是识别和回收垃圾对象进行内存清理,不同代可使用不同的收集器: 新生代收集器使用的收集器:Serial、ParNew、Parallel Scavenge; 老年代收集器使用的收集器:Serial Old(MSC)、Parallel Old、CMS。 总结: Serial old和新生代的所有回收器都能搭配;也可以作为CMS回收器的备用回收器; CMS只能和新生代的Serial和ParNew搭配,而且ParNew是CMS默认的新生代回收器; 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态 并发(Concurrent):指用户线程和垃圾收集线程同时执行(但不一定是并行的,可能是交替执行),用户程序继续运行,而垃圾收集程序运行在另外的CPU上。 三. GC的执行机制 Java 中的堆(deap) 也是 GC 收集垃圾的主要区域。由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。GC有两种类型:Scavenge GC(Minor GC)和Full GC(Major GC): (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |