今日总结
什么是垃圾:只要对象不再被使用,那即是垃圾
如何判断为垃圾:可达性分析算法和引用计算算法,JVM使用的是可达性分析算法
什么是GC Roots:GC Roots是一组必须活跃的引用,跟GC Roots无关联的引用即是垃圾,可被回收
常见的垃圾回收算法:标记清除、标记复制、标记整理
为什么需要分代:大部分对象都死得早,只有少部分对象会存活很长时间。在堆内存上都会在物理或逻辑上进行分代,为了使「stop the word」持续的时间尽可能短以及提高并发式GC所能应付的内存分配速率。
Monor GC:当Eden区满了则触发,从GC Roots往下遍历,年轻代GC不关心老年代对象
什么是card table【卡表】:空间换时间(类似bitmap),能够避免扫描老年代的所有对应进而顺利进行Monor GC (案例:老年代对象持有年轻代对象引用)
堆内存占比:年轻代占堆内存1/3,老年代占堆内存2/3。Eden区占年轻代8/10,Survivor区占年轻代2/10(其中From 和To 各站1/10)
《对线面试官》系列目前已经连载29篇啦,这是一个讲人话面试系列
- 【对线面试官】Java注解
- 【对线面试官】Java泛型
- 【对线面试官】 Java NIO
- 【对线面试官】Java反射 && 动态代理
- 【对线面试官】多线程基础
- 【对线面试官】 CAS
- 【对线面试官】synchronized
- 【对线面试官】AQS&&ReentrantLock
- 【对线面试官】线程池
- 【对线面试官】ThreadLocal
- 【对线面试官】CountDownLatch和CyclicBarrier
- 【对线面试官】为什么需要Java内存模型?
- 【对线面试官】深入浅出 Java 内存模型
- 【对线面试官】Java从编译到执行,发生了什么?
- 【对线面试官】双亲委派机制
- 【对线面试官】JVM内存结构
- 【对线面试官】List
- 【对线面试官】Map
- 【对线面试官】SpringMVC
- 【对线面试官】Spring基础
- 【对线面试官】SpringBean生命周期
- 【对线面试官】Redis基础
- 【对线面试官】Redis持久化
- 【对线面试官】Kafka基础
- 【对线面试官】使用Kafka会考虑什么问题?
- 【对线面试官】MySQL索引
- 【对线面试官】MySQL 事务&&锁机制&&MVCC
- 【对线面试官】MySQL调优