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

2 篇文章 0 订阅

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 标记压缩

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

在这里插入图片描述

GC演化过程

  • 随着内存大小的不断增大而演进
  1. 几兆-几十兆
    S e r i a l Serial Serial单线程 S T W STW STW垃圾回收
  2. 几十兆- 上百兆
    p a r a l l e l parallel parallel并行多线程
  3. 几十G
    C o u n c u r r e n t   G C Councurrent\ GC Councurrent GC

目前 1.8 1.8 1.8采用分代管理方法

无论有多大的内存,我们将其 ( 1 : 2 ) (1:2) (1:2)的分为两块,比例为 1 1 1的叫做新生代另一个叫老年代

当一个对象诞生的时候,我们优先将其放在新生代,当其回收了好多次15/6还没有回收掉,我们将其放进老年代

堆逻辑分析

逻辑上来讲,首次分配在 e d e n eden eden区,对于一次 Y G C YGC YGC过程,我们将 e d e n eden eden区所有活的对象复制到 s u r v i v o r survivor survivor里面
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值