Java的垃圾回收机制

2023-11-02

一 点睛

当程序创建对象、数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中,当这块内存不再被任何引用变量引用时,这块内存就变成了垃圾,等待垃圾回收机制进行回收。

垃圾回收机制的特点:

  • 垃圾回收机制只负责回收堆内存中对象,不会回收任何任何物理资源(例如数据库连接,网络IO等资源)。

  • 程序无法精确控制垃圾回收的运行,垃圾回收会在合适时候进行垃圾回收。当对象永久性地失去引用后,系统就会在合适时候回收它所占的内存。

  • 垃圾回收机制回收任何对象之前,总会先调用它的finalize方法,该方法可能使该对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消回收。

二 对象在内存中的状态

  • 激活状态:当一个对象被创建后,有一个以上的引用变量引用它。则这个对象在程序中处于激活状态,程序可通过引用变量来调用该对象的属性和方法。

  • 去活状态:如果程序中某个对象不再有任何引用变量引用它,它就进入了去活状态。在这个状态下,系统的垃圾回收机制准备回收该对象所占用的内存,在回收该对象之前,系统会调用所有去活状态对象的finalize方法进行资源清理,如果系统在调用finalize方法重新让一个引用变量引用该对象,则这个对象会再次变为激活状态;否则该对象将进入死亡状态。

  • 死亡状态:当对象与所有引用变量的关联都被切断,且系统会调用所有对象的finalize方法依然没有使该对象变成激活状态,那这个对象将永久性地失去引用,最后变成死亡状态。只有当一个对象处于死亡状态时,系统才会真正回收该对象所占有的资源。

三 实战

1 代码

public class StatusTranfer
{
   public static void test()
   {
      String a = new String("轻量级Java EE企业应用实战"); //执行完该代码后,此处的字符串对象处于可达状态
      a = new String("疯狂Java讲义");   //执行完该代码,此处的字符串对象处于可达状态,上处字符串处于可恢复状态
   }
   public static void main(String[] args)
   {
      test();     
   }
}

2 说明

一个对象可以被一个方法的局部变量引用,也可以被其他类的类变量引用,或被其他对象的实例变量引用。当某个对象被其他类的类变量引用时,只有该类被销毁后,该对象才会进入可恢复状态;当某个对象被其他对象的实例变量引用后,只有当该对象被销毁后,该对象才会进入可恢复状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java的垃圾回收机制 的相关文章

随机推荐

  • Python+Docker+Redis-实现分布式爬取阳光问政

    sun political 一 编写爬虫代码 1 创建项目 pip install scrapy scrapy redis i https pypi tuna tsinghua edu cn simple scrapy startproje
  • 配置时间格式spring:jackson:date-format:yyyy-MM-dd HH:mm:ss

    配置时间格式 spring jackson date format yyyy MM dd HH mm ss
  • [密码学复习]Cryptography

    整合 Week 2对称加密 Two requirements A strong encryption algorithm A secret key known only to participants 1 有三部分构成 1 加密算法 2 可
  • JAVA集成国密SM3

    JAVA集成国密SM3加密 验签 一 pom配置 二 加密代码集成 2 1 目录结构 2 2 源码 2 3 测试 三 验签代码集成 2 1 目录结构 2 2 源码 2 3 测试 四 相关链接 国密算法概述 https blog csdn n
  • 超威主板关闭超线程教程

    说明 在使用超威主板的服务器的时候发现 关闭超线程要比开启超线程性能表现优越一些 服务器超线程默认是开启的 故而需要关闭超线程的服务 注 本文不是广告 只是有人经常咨询 故而记录了一个简单的流程步骤 与大家共勉 一 开机 开机之后等待开机界
  • 2019年DNS服务器速度测评【DNS速度排名】

    2019年DNS服务器速度测评 DNS速度排名 已经进入2019年了 很多喜爱玩游戏的用户都会在网上搜索什么DNS最快 什么dns玩游戏快 什么dns好等等 这些关于dns排名的问题 本站就这些问题进行了整合 最后总结出两大类 第一类是浏览
  • redis命令,SpringBoot整合Redis6,主从复制,哨兵模式,集群,springCache初高级应用。

    目录 1 Docker安装Redis 2 Redis的基础 2 1 redis的key命令 2 2 reids的数据结构 6 0新增的数据结构 1 String 字符串 类型 2 List 列表 类型 3 set 集合 类型 4 Hash
  • 20道java集合源码面试题,请笑纳

    问题一 看到这个图 你会想到什么 答 这个图由Map指向Collection的Produces并不是说Map是Collection的一个子类 子接口 这里的意思是指Map的KeySet获取到的一个视图是Collection的子接口 我们可以
  • 数据结构----结构--线性结构--字符串

    数据结构 结构 线性结构 字符串 一 字符串的定义方式 第一种 char str1 Hello 第二种 char str2 Hello 区别 1 所在区域不同 str1在常量区 str2在这里的写法是在栈区 2 元素是否可改 str1中的元
  • Keil STM32 不包含头文件或声明函数直接调用函数导致的异常问题

    问题 调用函数GetAmbientTemperature 获取返回值 打印出来的很大的异常数字 打印结果 解决 参考 关于Keil5调用函数不包含对应头函数问题总结 导致问题原因就是 没有包含对应函数头文件 编译虽然不会报错 但是读不到函数
  • 矩阵系统全方位管理多平台1000多个账号,实现精准化运营获客!

    全自动化视频综合处理工具 普通的剪辑软件是不可能实现自动化 一个人一天制作3000 条视频 必须要借助高效率的工具 呆头鹅批量剪辑软件 探店混剪系统 导入大量的素材 就能自动帮你批量处理 满足各大商业用户的需求 我们的软件确保你能够一天迅速
  • 根文件系统rootfs制作——使用buildroot工具(重制版)

    根文件系统rootfs制作 使用buildroot工具 重制版 0 前言 一 rootfs配置 1 下载buildroot源码 2 开始配置 Target options配置如下 Toolchain 交叉工具链配置 根据自己的环境配置 Sy
  • 用Qlabel显示pixcelmap时出现的图像扭曲的处理

    在一个将RGB图像转换为灰度图的程序中 用Qlabel显示灰度图时 出现了图像扭曲的问题 cv Mat gimg cv cvtColor original image gimg CV BGR2GRAY image gimg img QIma
  • 3.4 迭代法

    4 1 雅克比迭代法 雅可比迭代法是一种用于求解线性方程组的迭代算法 其基本思想是将线性方程组中的系数矩阵拆分为对角线矩阵和非对角线矩阵两部分 并利用对角线矩阵的逆矩阵来迭代求解方程组 具体地 设线性方程组为Ax b 其中A为系数矩阵 b为
  • C++桥接模式:Bridge Pattern

    在现实生活中 某些类具有两个或多个维度的变化且这多个维度都可能需要后期扩展 如图形既可按形状分 又可按颜色分 如何设计类似于 Photoshop 这样的软件 能画不同形状和不同颜色的图形呢 如果用继承方式 m 种形状和 n 种颜色的图形就有
  • Apache shiro学习笔记+ spring整合shiro (一)

    Apache Shiro官网 http shiro apache org 概念 shiro是一个强大灵活的开源安全框架 可以干净利落的处理认证 授权 企业会话管理和加密 shiro的首要目标是简单和易于理解 安全有时候是非常复杂令人头疼的问
  • 鸢尾花分类预测数据分析

    鸢尾花分类预测数据分析 目标 根据未知种类鸢尾花的特征预测其种类 数据 鸢尾花数据集 分析 描述性分析 探索性分析 建模分析 模型分析 迭代分析 成果 位置种类鸢尾花的预测结果 import numpy as np import matpl
  • ios屏幕的旋转,Device Orientation

    屏幕旋转 我的理解是ios设备根据重力感应改变屏幕的方向 那么如何在屏幕转动后变换UI 或则保持原样呢 ios设备支持4个方向 UIInterfaceOrientationPortrait UIInterfaceOrientationPor
  • 湖南麒麟面试 2014

    地点 华科8号楼415 问题 1 内核安全 2 缓冲区溢出是什么造成的 3 内存泄露是怎么造成的 内存出错 4 在一个局部函数内malloc malloc是在堆上还是在栈上 函数结束时内存发生什么变化 5 堆和栈的区别 6 什么情况下定义变
  • Java的垃圾回收机制

    一 点睛 当程序创建对象 数组等引用类型实体时 系统都会在堆内存中为之分配一块内存区 对象就保存在这块内存区中 当这块内存不再被任何引用变量引用时 这块内存就变成了垃圾 等待垃圾回收机制进行回收 垃圾回收机制的特点 垃圾回收机制只负责回收堆