对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 new 操作符为对象分配内存。不过,在清除对象时,由系统自动进行内存回收,不需要用户额外处理。这也是 Java 语言的一大特色,某种程度上方便了程序员对内存的管理。

Java 语言的内存自动回收称为垃圾回收(Garbage Collection)机制,简称 GC。垃圾回收机制是指 JVM 用于释放那些不再使用的对象所占用的内存。

Java 语言并不要求 JVM 有 GC,也没有规定 GC 如何工作。不过常用的 JVM 都有 GC,而且大多数 GC 都使用类似的算法管理内存和执行回收操作。具体的垃圾回收实现策略有好多种,在此不再赘述。

一个对象被当作垃圾回收的情况主要如下两种。

1)对象的引用超过其作用范围。

{Object o = new Object();    // 对象o的作用范围,超过这个范围对象将被视为垃圾
}

2)对象被赋值为 null。

{Object o = new Object();o = null;    // 对象被赋值为null将被视为垃圾
}

Java 的 Object 类中还提供了一个 protected 类型的 finalize() 方法,因此任何 Java 类都可以覆盖这个方法,在这个方法中进行释放对象所占有的相关资源的操作

在 Java 虚拟机的堆区,每个对象都可能处于以下三种状态之一。

  • 可触及状态:当一个对象被创建后,只要程序中还有引用变量引用它,那么它就始终处于可触及状态。

  • 可复活状态:当程序不再有任何引用变量引用该对象时,该对象就进入可复活状态。在这个状态下,垃圾回收器会准备释放它所占用的内存,在释放之前,会调用它及其他处于可复活状态的对象的finalize() 方法,这些 finalize() 方法有可能使该对象重新转到可触及状态。

  • 不可触及状态:当 Java 虚拟机执行完所有可复活对象的 finalize()
    方法后,如果这些方法都没有使该对象转到可触及状态,垃圾回收器才会真正回收它占用的内存。

注意:调用 System.gc() 或者 Runtime.gc() 方法也不能保证回收操作一定执行,它只是提高了 Java 垃圾回收器尽快回收垃圾的可能性

1.11 对象的销毁相关推荐

  1. Java基础入门笔记-对象的销毁

    在Java语言,程序员只管创建对象,不管销毁对象.对象的销毁由系统自动完成. Student stu=new Student(); 当对象不再被使用时,由垃圾回收机制GC自动回收.(GC:Garbag ...

  2. Java中对象的销毁

    Java中的基本数据类型变量和对象的名称引用变量如定义在方法中,都为局部变量.但对象本身不一定是局部生命周期.如函数外存在其他对该对象的引用变量,则该对象的生命周期延伸至该其他引用变量所在的块. 如从 ...

  3. laravel-集合对象的销毁forget,重组values(),pluck ()方法

    1.通过集合的键来移除掉集合中的一个项目: $collection = collect(['name' => 'taylor', 'framework' => 'laravel']);$c ...

  4. android poi搜索提示搜索对象已销毁,Android SDK | 百度地图API SDK

    使用须知 在使用百度地图SDK(Android版)之前,请仔细阅读使用条款,一旦您使用了百度地图SDK(Android版),即表明您已阅读并接受使用条款中的全部内容.百度地图SDK(Android版) ...

  5. spring-bean对象创建销毁顺序depend-on 干预

    无依赖bean创建和销毁顺序 bean对象的创建顺序和bean xml中定义的顺序一致 bean销毁的顺序和bean xml中定义的顺序相反 通过构造器强依赖bean创建和销毁顺序 这里的例子是 be ...

  6. access开发精要(11)-对象命名规定

    加上前缀表示不同类型的对象 表格:tbl 查询:qry 窗体:frm 报表:rpt 宏:mcr 模块:bas或mod

  7. 11. 对象创建模式之 Builder模式(构建器)(不常用)

    1. 动机 在软件系统中,有时候面临着"一个"复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化, ...

  8. C#中对象的销毁有三种方式Finalize,Dispose,GC。

    为什么80%的码农都做不了架构师?>>>    1.Finalize方法(C#中是析构函数,以下称析构函数)是用于释放非托管资源的,而托管资源会由GC自动回收.所以,我们也可以这样来 ...

  9. 云开发技术应用python_云开发技术应用(Python)

    本书共14章,从Python语言的语法特性开始,介绍了Python的安装和配置.数据类型及表达式.流程控制.序列和字典.文件处理.函数等,由浅入深,循序渐进,逐步引入高级话题,包括面向对象编程.模块和 ...

最新文章

  1. 信息安全 数据赛 铁人三项_2018信息安全铁人三项数据赛题解
  2. 服务器需不需要虚拟内存,服务器需不需要虚拟内存
  3. 服务器维护10月11魔兽,魔兽世界10月11日更新内容是什么_10.11PVP改动预览_3DM网游...
  4. R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析:拟合连续性自变量和事件风险之间的关系并绘制直方图、平滑曲线、双Y轴于同一个图像中
  5. 微信头像单张图片上传
  6. Redis常用命令及命名规范
  7. android用sax解析xml,Android:采用SAX解析XML实例
  8. (转)Vsdocman7.2 注册版
  9. 扬州大学广陵学院c语言试卷,扬州大学广陵学院交直流调速复习题答案(试卷)
  10. Python快速入门教材推荐!
  11. android 开源gis,开源GIS之--移动GIS
  12. 2021年3月世界编程语言排行榜
  13. 智商一般学计算机,IQ最高的十大专业公布 智商不高慎选
  14. 让vscode完美支持go vendor的代码跳转(使用vscode必看)
  15. Brew doctor warns about “Warning: A newer Command Line Tools release is available”
  16. 小知识系列(3):Hanoi塔(汉诺塔,河内塔)
  17. 微信订阅号要租服务器吗,订阅号怎么向认证号借权-微信订阅号已经认证是否有网页授权功能...
  18. MySQL中的极限值
  19. python win10 桌面_利用Python批量提取Win10锁屏壁纸实战教程
  20. 关于MLPerf的一些调查

热门文章

  1. DL之Attention:Attention注意力机制的简介、应用领域之详细攻略
  2. Linux cron 定时执行任务
  3. 20 道 Spring Boot 面试题
  4. Python小游戏之 - 飞机大战 !
  5. 探秘JVM(二)——编译进行时
  6. MQTT数据接收流程之数据处理回调函数注册(基于LWIP/RDA8955平台)
  7. C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“
  8. (chap1 网络基础知识)一些概念
  9. 《研磨设计模式》chap12 观察者模式observer(2)模式介绍
  10. 968. 监控二叉树(递归+贪心)