[JavaSE] 核心机制之垃圾回收机制

[JavaSE] 核心机制之垃圾回收机制,第1张

目录
      • JVM简介
      • 垃圾回收简介
      • Garbage colletors
      • Root Searching
      • 常见的垃圾回收算法
        • Mark-Sweep 标记清除
        • Copying 拷贝
        • Mark-Compact 标记压缩

JVM简介

JVM : 为了实现Java的跨平台性质

垃圾回收简介

垃圾收集主要是对内存的释放。创建对象的时候申请一个空间。

  1. 不在使用的内存空间应该回收
  2. Java中消除了回收无用内存空间的职责;提供一种系统级线程跟踪存储空间的分配情况。在JVM的空闲时,检查并释放可释放的存储空间;相比C++开发人员负责要自己收回无用内存
  3. 垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预
  4. 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方法)引用的对象
常见的垃圾回收算法 Mark-Sweep 标记清除

将可回收的垃圾,标记出来并且清理

但是会使得空间碎片化

Copying 拷贝

每次只允许你用一半的内存,我们有用的内存丢到另一半去。

虽然效率很高,但是造成了空间浪费

Mark-Compact 标记压缩

我们找到可回收的内存区块,将其清除,然后将所有有用的对象挪到前面

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/920207.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存