Java垃圾处理机制学习总结

2024-05-10 17:08

本文主要是介绍Java垃圾处理机制学习总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、垃圾收集(Garbage Collection)

在研究Java垃圾回收及至时候,考虑哪些内存需要收回?什么时间收回?如何收回?

Java虚拟机堆中存放着几乎所有的Java实例对象,如何判断众多对象中哪些对象已经失效?

-引用计数法:给对象添加一个引用计数器,每一次被引用时,计数器加1;每一次引用失效时,计数器减1;任何时候计数器都为0的对象就是不能被访问的对象。(Java中并没有  采用这种方法,因为该方法很难解决对象之间互相引用的问题)。

-根搜索算法:GC Root 到对象之间没有可以连接的路径时,这些对象是不可用的。

对象的消亡需要经过两次的标记,上面判断失效是第一次,对象的最后一次救赎在F-Queue中。

在F-Queue中的对象如果在被回收之前与引用链上的任何一个对象建立联系,那么它就会被从F-Queue中移出。

二、垃圾回收的算法:

(1)标记-清除算法

第一步:标记处出所有需要清除的对象;第二步:统一收掉所有被标记的对象。

缺点:1、效率不高。2、空间利用率不好,清除后会产生很多不连续的内存区域。这样会导致当程序需要创建大对象进行程序执行时,找不到足够的空间,从而又一次触发垃圾回收动作。

(2)复制算法

将内存按容量分为两部分,每次只用其中一块,当这一块用完了,就将还存活的对象复制到另一块上,然后再把使用过的内存空间清理掉,无内存碎片问题。只是将内存缩减一半,代价有点高~

(3)标记-整理算法

首先是标记,然后将所有存活的对象向一端移动,最后直接清理掉端边界以外的所有内存。

(4)分析收集算法

内存划分块,个新生代和老块中的对象回收仍需要标记-清除算法。


这篇关于Java垃圾处理机制学习总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/977048

相关文章

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Java日期类详解(最新推荐)

《Java日期类详解(最新推荐)》早期版本主要使用java.util.Date、java.util.Calendar等类,Java8及以后引入了新的日期和时间API(JSR310),包含在ja... 目录旧的日期时间API新的日期时间 API(Java 8+)获取时间戳时间计算与其他日期时间类型的转换Dur