对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 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. 非常抱歉,pmcaff网站硬盘故障,无法访问,努力恢复ing……
  2. 三、spring boot 1.5.4 web容器定制(端口号等修改)
  3. concurrentbag 删除指定元素_Python 列表,for循环,元组的使用(修改、添加、删除、排序、切片)
  4. rabbitmq 集群保证顺序消费_随笔《RabbitMQ》如何保证消息不被重复消费
  5. ftp linux 服务器 麒麟_麒麟系统安装ftp
  6. 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)
  7. Time complexity analysis of algorithms
  8. Guava学习笔记:Immutable(不可变)集合
  9. Ubuntu系统下面软件安装更新命令
  10. 一线工程师告诉你嵌入式真实现状与发展前景
  11. AI足球预测软件|足球大数据预测分析爬虫
  12. JAVA面向对象学习——java面向对象概念———接口
  13. 《Detecting Adversarial Examples through Image Transformation》和CW attack的阅读笔记
  14. SwiftUI接入穿山甲开屏广告
  15. 华为首次自曝“天才少年”成果:入职不到一年就干成这件大事,网友:值200万年薪!| 留言送书...
  16. 织梦5.7登陆注册实现
  17. html5 设计 form,为HTML5表单设计表单模板
  18. mvn install BUILD FAILURE : Downloading from central: https://repo.maven.apache.org/maven2/org/sp...
  19. 使用base64格式字符串播放音频
  20. 案例分析|人工智能产品带来的用户价值

热门文章

  1. YZMCMS V5.3后台 SSRF
  2. Surf Gym - 100819S
  3. JavaScript 表单编程
  4. 你必须知道的28个HTML5特征、窍门和技术
  5. SQLSERVER单表CRUD通用方法
  6. HTML5/CSS3hack
  7. 说一说为什么gethostbyname用完后不用释放内存
  8. 深度学习(神经网络) —— BP神经网络原理推导及python实现
  9. mysql check exist_mysql – 使用多个EXIST进行查询
  10. 打印机更换感光鼓单元k_SOHO打印机基础培训(成像原理)