1.11 对象的销毁
对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 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 对象的销毁相关推荐
- Java基础入门笔记-对象的销毁
在Java语言,程序员只管创建对象,不管销毁对象.对象的销毁由系统自动完成. Student stu=new Student(); 当对象不再被使用时,由垃圾回收机制GC自动回收.(GC:Garbag ...
- Java中对象的销毁
Java中的基本数据类型变量和对象的名称引用变量如定义在方法中,都为局部变量.但对象本身不一定是局部生命周期.如函数外存在其他对该对象的引用变量,则该对象的生命周期延伸至该其他引用变量所在的块. 如从 ...
- laravel-集合对象的销毁forget,重组values(),pluck ()方法
1.通过集合的键来移除掉集合中的一个项目: $collection = collect(['name' => 'taylor', 'framework' => 'laravel']);$c ...
- android poi搜索提示搜索对象已销毁,Android SDK | 百度地图API SDK
使用须知 在使用百度地图SDK(Android版)之前,请仔细阅读使用条款,一旦您使用了百度地图SDK(Android版),即表明您已阅读并接受使用条款中的全部内容.百度地图SDK(Android版) ...
- spring-bean对象创建销毁顺序depend-on 干预
无依赖bean创建和销毁顺序 bean对象的创建顺序和bean xml中定义的顺序一致 bean销毁的顺序和bean xml中定义的顺序相反 通过构造器强依赖bean创建和销毁顺序 这里的例子是 be ...
- access开发精要(11)-对象命名规定
加上前缀表示不同类型的对象 表格:tbl 查询:qry 窗体:frm 报表:rpt 宏:mcr 模块:bas或mod
- 11. 对象创建模式之 Builder模式(构建器)(不常用)
1. 动机 在软件系统中,有时候面临着"一个"复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化, ...
- C#中对象的销毁有三种方式Finalize,Dispose,GC。
为什么80%的码农都做不了架构师?>>> 1.Finalize方法(C#中是析构函数,以下称析构函数)是用于释放非托管资源的,而托管资源会由GC自动回收.所以,我们也可以这样来 ...
- 云开发技术应用python_云开发技术应用(Python)
本书共14章,从Python语言的语法特性开始,介绍了Python的安装和配置.数据类型及表达式.流程控制.序列和字典.文件处理.函数等,由浅入深,循序渐进,逐步引入高级话题,包括面向对象编程.模块和 ...
最新文章
- 非常抱歉,pmcaff网站硬盘故障,无法访问,努力恢复ing……
- 三、spring boot 1.5.4 web容器定制(端口号等修改)
- concurrentbag 删除指定元素_Python 列表,for循环,元组的使用(修改、添加、删除、排序、切片)
- rabbitmq 集群保证顺序消费_随笔《RabbitMQ》如何保证消息不被重复消费
- ftp linux 服务器 麒麟_麒麟系统安装ftp
- 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)
- Time complexity analysis of algorithms
- Guava学习笔记:Immutable(不可变)集合
- Ubuntu系统下面软件安装更新命令
- 一线工程师告诉你嵌入式真实现状与发展前景
- AI足球预测软件|足球大数据预测分析爬虫
- JAVA面向对象学习——java面向对象概念———接口
- 《Detecting Adversarial Examples through Image Transformation》和CW attack的阅读笔记
- SwiftUI接入穿山甲开屏广告
- 华为首次自曝“天才少年”成果:入职不到一年就干成这件大事,网友:值200万年薪!| 留言送书...
- 织梦5.7登陆注册实现
- html5 设计 form,为HTML5表单设计表单模板
- mvn install BUILD FAILURE : Downloading from central: https://repo.maven.apache.org/maven2/org/sp...
- 使用base64格式字符串播放音频
- 案例分析|人工智能产品带来的用户价值