JVM 3

本地方法接口允许Java调用非Java代码,如C语言实现。垃圾回收是Java自动内存管理的关键,包括标记、复制、清除和压缩等算法,用于识别和回收无引用对象,防止内存泄漏和溢出。不同阶段的垃圾回收器,如Serial、Parallel和老年代垃圾回收器,适应不同的场景和内存区间。
摘要由CSDN通过智能技术生成

本地方法接口

一个 Native Method 是一个 Java 调用非 Java 代码的接囗。

一个 Native Method 是这样一个 Java 方法:该方法的实现由非 Java 语言实现,比如 C 。

为什么使用本地方法

Java语言需要与外部环境进行交互,直接访问操作系统的接口即可

执行引擎

作用: 将加载到内存中的字节码(不是直接运行的机器码), 解释/编译为不同凭平台的机器码.

垃圾回收

概述:Java支持自动垃圾回收的,但是自动垃圾回收并不是Java首创的.

什么样的对象是垃圾:运行的程序中没有任何引用指向的对象.

为什么要垃圾回收:如果不及时清理垃圾,就会出现内存溢出问题.

在垃圾回收时,可以对内存碎片进行清理.

内存泄漏与内存溢出

内存泄漏:一些已经不用的对象,垃圾回收器不能判断它是垃圾,这些对象就默默的占用内存,称为内存泄漏,大量此类对象的存在,也是导致内存溢出的原因.

内存溢出:经过垃圾回收后,内存中仍然无法存储新创建的对象,内存不够用溢出.

自动内存管理

好处:对内存管理更合理,自动化.

缺点:不能调整垃圾回收机制.

垃圾回收相关算法

标记阶段:

作用:判断对象是否是垃圾对象,是否有引用指向对象.

相关的标记算法有:引用计数算法、可达性分析算法.

引用标记算法

有个计数器来记录对象的引用数量.

缺点:需要维护计数器,占用空间,频繁操作需要时间开销.

无法解决循环引用的问题.

(循环引用:指多个对象相互引用,但是没有其他外部引用指向它们,且它们的计数器都不为0,无法进行垃圾回收,会导致内存泄漏)

可达性分析算法(根搜索算法)

实现思路:从一些作为根对象的对象出发查找,与根对象直接或间接连接的对象就是存活对象,不与根对象直接或间接相连的对象就是垃圾对象.

根对象可以是那些元素:

1.在虚拟机栈中被使用的.

2.在方法中存储的静态成员指向的对象.

3.被同步锁synchronized使用的.

4.在虚拟机内部使用的对象.

对象的finalization机制

当一个对象被标记为垃圾后,在真正被垃圾回收之前,会调用一次Object类中的finalize().判断是否还有逻辑需要处理.finalize()方法,只会被调用一次,垃圾回收机制会自己调用,不需要手动调用,如果手动调用,则垃圾回收机制不会再次调用.

有了finalization机制的存在,在虚拟机中把对象状态分为以下三种:

1.可触及的:不是垃圾,与根对象相连接.

2.可复活的:判断为垃圾,且还没有调用finalize()方法(通过finalize()方法可以复活的对象).

3.不可触及的:判断为垃圾,且经过finalize()方法没有被复活的对象,该类对象会被垃圾回收.

回收阶段:

标记——复制算法

将内存分为大小相等的两份空间,把当前使用的空间中存活的对象复制到另一个空间中,将正在使用的空间中的垃圾对象清除

优点:减少内存碎片

缺点:如果需要复制的对象较多,效率低

适用场景:存活对象少的,新生代适合使用标记复制算法

标记——清除算法

清除并不是真正的清除,而是将垃圾对象地址存储到一个空闲列表中,后面有新的对象到来时,新对象直接覆盖掉垃圾对象即可

优点:实现简单

缺点:效率低,回收后有碎片产生

标记——压缩算法

在标记——清除算法的基础上增加了一次内存碎片整理

标记——清除算法,标记——压缩算法适合老年代垃圾回收

垃圾回收器

垃圾收集器是垃圾回收的实际实现者,垃圾回收算法是理论实践

垃圾回收器分类

按线程数量分:

单线程 :Serial,Serial old

多线程 :Parallel

按工作模式分:

独占式:垃圾回收线程执行时,其他线程暂停

并行式:垃圾回收线程可以和用户线程同时执行

按工作的内存区间分:

年轻代垃圾回收器

老年代垃圾回收器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来是会发光的️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值