- JVM简介
- 垃圾回收简介
- Garbage colletors
- Root Searching
- 常见的垃圾回收算法
- Mark-Sweep 标记清除
- Copying 拷贝
- Mark-Compact 标记压缩
JVM : 为了实现Java的跨平台性质
垃圾回收简介垃圾收集主要是对内存的释放。创建对象的时候申请一个空间。
- 不在使用的内存空间应该回收
- Java中消除了回收无用内存空间的职责;提供一种系统级线程跟踪存储空间的分配情况。在JVM的空闲时,检查并释放可释放的存储空间;相比C++开发人员负责要自己收回无用内存
- 垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预
- GC自动回收,提高了内存空间的利用雄安率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而导致的内存泄漏
高级的面试题 :
- 垃圾收集器有几种
- 垃圾收集器底层原理剖析
- 垃圾收集器底层算法、优化
小扩展 :
Java : 业务方面
Golang : 专门的中间件或者运维开发
掌握这两门语言,对成为架构师非常给力
Garbage colletors
在三种垃圾回收算法的基础之上,构建了十种垃圾回收器 :
目前生产环境 jdk1.8 , 常用的是
Parallel Scavenge (PS)
Parallel Old (PO)
1.9使用 G1
Root Searching该方法垃圾回收主要算法之一,简称(根可达性分析)
JVM定义一个名为 GC Roots 的对象作为起始点, 这个 GC Roots可用有多个,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相链的时候,则证明此对象不可用,即可用进行垃圾回收
GC Roots对象一般包括 :
- 虚拟机栈(栈帧中本地变量表)中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI(Native方法)引用的对象
将可回收的垃圾,标记出来并且清理
但是会使得空间碎片化
Copying 拷贝每次只允许你用一半的内存,我们有用的内存丢到另一半去。
虽然效率很高,但是造成了空间浪费
我们找到可回收的内存区块,将其清除,然后将所有有用的对象挪到前面
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)