推荐好文:
2.成为 Java GC 专家(1):深入浅出 Java 垃圾回收机制
3.成为 Java GC 专家( 2 ):如何监控 Java 垃圾回收机制
4.成为 Java GC 专家( 3 ): 如何优化 Java 垃圾回收机制
7.面试总结:java程序执行过程 + JVM内存管理 + GC垃圾回收机制
带着以下问题去学习垃圾回收机制:(垃圾回收器)
1.什么是垃圾回收机制? 什么是自动垃圾回收?
2. java垃圾回收算法
3. 哪些内存需要回收?——who
4.什么时候回收?——when
5.怎么回收?——how
6.怎么减少gc的开销,优化.
7.JVM内存划分(内存管理)
8.jvm怎么配置gc的参数
9.常用垃圾回收机制的基本过程/流程。(怎么回收)
(1).标记-清除-压缩
eg:第一步:标记
(垃圾回收的第一步是标记。垃圾回收器此时会找出哪些内存在使用中(程序中有指针指向),还有哪些不是(没有被任何指针给指向)。)
第二步:清除 和压缩
(清除是指 删掉标记出的未引用对象。)
(压缩是指 为了提升性能,删除了未引用对象后,还可以将剩下的已引用对象放在一起(压缩),这样就能更简单快捷地分配新对象了。 )
(2) 复制算法
将内存分为两块,每次只使用一块。当这一块内存满了,就将还存活的对象复制到另一块上,并且严格按照内存地址排列,然后把已使用的那块内存统一回收。
优点是:能够得到连续的内存空间
缺点是:浪费了一半内存
(3)分代算法
在java中,把内存中的对象按生命长短分为:
- 新生代:活不了多久就go die 了,比如局部变量
- 老年代:老不死的,活的久但也会go die,比如一些生命周期长的对象
- 永久代:千年王八万年龟,不死,比如加载的class信息
有一点需要注意:新生代和老年代存储在java虚拟机堆上 ;永久代存储在方法区上
补充关键字:
内存管理意识 程序跑起来就不断吃资源 内存泄漏 资源释放
垃圾自动回收 内存分配和管理 可达性分析
.