finalize方法作用
垃圾回收机制的一个算法,算法分析理解起来比较抽象,再讲一下新生代和老年代,垃圾回收机制的一个策略,垃圾回收机制是干嘛用的,1. 什么是垃圾回收机制?相当于JVM不定时的去回收不可达的对象,他这个完全是自动的,有没有人学过C语言的,C语言需自己去释放内存的,JAVA就不一样,你不用去管理内存,我后台会帮你自动去回收,垃圾回收机制是JAVA非常核心的一个知识,因为他不需要自己去回收,是自动化的,回收的是不可达对象,gc方法主要是提示给GC进行回收,但是不会立即回收2. 什么是不可达对象?对象没有被引用,或者对象没有存活,不可达对象并不是马上就回收掉的
package com.learn.test;/*** 演示一下垃圾回收机制* @author Leon.Sun**/
public class Test001 {/*** 什么是不可达对象* 没有继续被引用到了* 或者你自己直接置为空* 提示垃圾回收器回收* JVM不会立马回收掉的* 有的地方吧可达叫做没有存活* 这其实是一个意思* 表示没有被继续的使用* * @param args*/public static void main(String[] args) {/*** 我定义一个对象* new一下Object这个类* 是任何类的祖宗* new这个Object类的时候* 你看这个对象可不可达* 这个情况还是可达的* 除非GC他去回收的时候* 如果没有被继续引用的情况下* 可能就不可达了* * obj1是可达的* 因为他已经被别人给使用到了* 这就叫可达对象* 如果你把一个对象定义出来* 为什么是可达的呢* 虽然他没有被使用掉* 因为JVM会做一些垃圾回收分析* 我判断一下他到底可不可达* 可达的* 归根结底判断原则是什么呢* 具体要根据算法进行分析的* 这个刚开始可能是可达的* * 如果没有置为null* 它是不会立马进行回收的* 因为JVM底层需要算法进行分析* 分析的时候是需要过程的* 没有立马知道他是不可达对象* 通过层层算法得知之后* 我才知道obj1没有继续使用的情况下* 那么他才是不可达对象* 一定要在强制标示为null的情况下* obj1是不可达对象* */// Object obj1 = new Object();/*** 这里要new Test001* new完之后再运行一遍就可以了* finalize方法正好被Test001给重写了* 垃圾回收机制在回收之前* 它会调用finalize方法的* 垃圾回收机制要开始执行我的方法啦................* 是不是开始进行回收了* 但是这个不代表一定会进行回收的* GC线程你们明白是什么意思没有* GC线程是守护线程还是非守护线程* 它是和主线程绑在一起的* 如果他不是守护线程* 我主线程挂了你还在就没什么用* GC线程是跟着主线程结束* 所以他是一个守护线程* 这个是最基本的* 在学JAVASE之前的时候* */Object obj1 = new Test001();/*** 一般我们可以把它置为空* 置为空可不可达* 如果你把object置为空的情况下* 那这个时候会怎么样呢* 相当于这个对象不可达了* 记住这个就表示不可达了* 不可达对象* 提示JVM去回收的* 加这段代码和不加这段代码有什么区别* 比如我的GC进行回收的时候* 最开始通过计数法* 计数法什么意思呢* 会给这个对象做一个计数* 如果垃圾回收器每次回收的时候* 发现你这个对象即使被使用的情况下* 我就会给这个对象引用数加1* 如果加到15次之后* 他就会进入到老年代里面去的* 这个时候这个对象就很少被回收的* * * 我们把obj1置为空* 表示这个对象已经告诉给JVM了,* 是不可达对象了* */obj1 = null;/*** 把obj1引用给obj2* 那这个时候对象可不可达* * 你不能说他完全是不可达对象* */
// Object obj2 = obj1;/*** 我们把obj2置为null* 这就完全告诉我了*/
// obj2 = null;/*** 这个表示什么意思,* 提示给GC进行回收垃圾* 很多人把gc理解为立即回收* 不能够立即的* 提示给JVM垃圾回收机制回收,但是不代表立即进行回收* 因为它不一定的* 他有空才会收* 因为它底层也是需要线程进行调度的* 只能说你调用这个代码提示GC进行回收* * 通知GC去回收* 但是不代表立即去回收*/System.gc();}/*** 比如你们知道这个方法* finalize方法是object类里面的* */@Overrideprotected void finalize() throws Throwable {/*** 垃圾回收机制之前会进行执行的方法* 在学JAVASE的时候* finalize和finally的区别* 相当于垃圾回收机制之前* 在这边有个误区* 我们打印一段日志*/System.out.println("垃圾回收机制要开始执行我的方法啦................");}
}
finalize方法作用相关推荐
- java finalize方法的使用
<JAVA编程思想>: Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize(). (1).对象不一定会被回收. (2).垃圾回收不是析构函数. ( ...
- Object的finalize()方法的作用是否与C++的析构函数作用相同
Object的finalize()方法的作用是否与C++的析构函数作用相同 public class Finalization {private static Finalization finaliz ...
- Java 中finalize()方法起什么作用呢?
转自: Java 中finalize()方法起什么作用呢? Java之finalize()方法功能说明 当我们在一个类中定义了finalize()方法时, 如果一个对象被垃圾收集器析构(回收)之前,则 ...
- java finalize 作用_java中的finalize方法有什么作用
java中的finalize方法是Object类中提供的一个方法,在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法. finalize()方法是Object类中提供的一个方 ...
- Java 总结finalize()方法
finalize()方法 1. 在Object类的源代码 protected void finalize() throws Throwable{ } 2. finalize()方法只有一个方法体,里面 ...
- java finalize方法总结、GC执行finalize的过程
java finalize方法总结.GC执行finalize的过程 分类: Java 2013-10-06 16:42 73人阅读 评论(0) 收藏 举报 finalize java jvm ...
- finalize的作用
今天介绍一下finalize,对于初级工程师来说,最常见的一个面试问题就是:final,finally,finalize的区别了吧.在Java编程思想这本书中也有介绍到finalize.下面我将大致来 ...
- java 调用 finalize_java finalize方法总结、GC执行finalize的过程
注:本文的目的并不是鼓励使用finalize方法,而是大致理清其作用.问题以及GC执行finalize的过程. 1. finalize的作用 finalize()是Object的protected方法 ...
- finalize方法
finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存时,该方法被调用,即当一个对象被虚拟机宣告死亡时会先调用它的finalize()方法,让此对象临终前交代点遗言,当然对象 ...
最新文章
- 手写Spring-ioc 注入 jdk反射实现 绝对满足你的好奇心哦 解决怎么我写了一个注解就可以直接注入了?
- java EE 监听器
- VC输出调用出错信息
- Mask-RCNN_推断网络:总览
- 【搜索】P1032 字串变换
- Atitit React的相关概念东东 attilax总结 v3
- 单片机c语言编程烧录软件,STC-ISP单片机烧录软件下载|好用的单片机编程器烧录软件_最火软件站...
- Socket编程入门(一)实现简单的Socket实例
- pythonmapdel_地质男转行学遥感Python——遥感数据裁剪的具体实现
- sqlmap基本命令
- 佳能Canon Pixma MX420 打印机驱动
- css 实现一个带尖角的正方形
- cobalt strick 4.0 系列教程 (5)--- 获取立足点
- w10共享网络没有计算机,win10网络共享找不到对方电脑怎么办
- 如何在手机上拍摄专业证件照片
- 嵌入式linux界面开发,基于嵌入式Linux平台实现GUI系统的设计方案
- jQuery 性能优化
- c++后端开发面试题
- iOS 设置代理详细步骤
- 证途网可信吗,艰辛的一建之路