垃圾回收机制的一个算法,算法分析理解起来比较抽象,再讲一下新生代和老年代,垃圾回收机制的一个策略,垃圾回收机制是干嘛用的,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方法作用相关推荐

  1. java finalize方法的使用

    <JAVA编程思想>: Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize(). (1).对象不一定会被回收. (2).垃圾回收不是析构函数. ( ...

  2. Object的finalize()方法的作用是否与C++的析构函数作用相同

    Object的finalize()方法的作用是否与C++的析构函数作用相同 public class Finalization {private static Finalization finaliz ...

  3. Java 中finalize()方法起什么作用呢?

    转自: Java 中finalize()方法起什么作用呢? Java之finalize()方法功能说明 当我们在一个类中定义了finalize()方法时, 如果一个对象被垃圾收集器析构(回收)之前,则 ...

  4. java finalize 作用_java中的finalize方法有什么作用

    java中的finalize方法是Object类中提供的一个方法,在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法. finalize()方法是Object类中提供的一个方 ...

  5. Java 总结finalize()方法

    finalize()方法 1. 在Object类的源代码 protected void finalize() throws Throwable{ } 2. finalize()方法只有一个方法体,里面 ...

  6. java finalize方法总结、GC执行finalize的过程

    java finalize方法总结.GC执行finalize的过程 分类: Java 2013-10-06 16:42  73人阅读  评论(0)  收藏  举报 finalize java jvm ...

  7. finalize的作用

    今天介绍一下finalize,对于初级工程师来说,最常见的一个面试问题就是:final,finally,finalize的区别了吧.在Java编程思想这本书中也有介绍到finalize.下面我将大致来 ...

  8. java 调用 finalize_java finalize方法总结、GC执行finalize的过程

    注:本文的目的并不是鼓励使用finalize方法,而是大致理清其作用.问题以及GC执行finalize的过程. 1. finalize的作用 finalize()是Object的protected方法 ...

  9. finalize方法

    ​ finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存时,该方法被调用,即当一个对象被虚拟机宣告死亡时会先调用它的finalize()方法,让此对象临终前交代点遗言,当然对象 ...

最新文章

  1. 手写Spring-ioc 注入 jdk反射实现 绝对满足你的好奇心哦 解决怎么我写了一个注解就可以直接注入了?
  2. java EE 监听器
  3. VC输出调用出错信息
  4. Mask-RCNN_推断网络:总览
  5. 【搜索】P1032 字串变换
  6. Atitit React的相关概念东东 attilax总结 v3
  7. 单片机c语言编程烧录软件,STC-ISP单片机烧录软件下载|好用的单片机编程器烧录软件_最火软件站...
  8. Socket编程入门(一)实现简单的Socket实例
  9. pythonmapdel_地质男转行学遥感Python——遥感数据裁剪的具体实现
  10. sqlmap基本命令
  11. 佳能Canon Pixma MX420 打印机驱动
  12. css 实现一个带尖角的正方形
  13. cobalt strick 4.0 系列教程 (5)--- 获取立足点
  14. w10共享网络没有计算机,win10网络共享找不到对方电脑怎么办
  15. 如何在手机上拍摄专业证件照片
  16. 嵌入式linux界面开发,基于嵌入式Linux平台实现GUI系统的设计方案
  17. jQuery 性能优化
  18. c++后端开发面试题
  19. iOS 设置代理详细步骤
  20. 证途网可信吗,艰辛的一建之路

热门文章

  1. IIs管理服务一直启动失败的原因之一
  2. 2012-01-10 自己写的基于jquery的翻页效果
  3. usb4-配置usb触摸屏
  4. JVM 分析工具和查看命令,超详细
  5. 【CJOJ2616】 【HZOI 2016】偏序 I(cdq分治,树状数组)
  6. spring容器的设值注入和构造注入
  7. 登陆时不显示上一次登陆的用户名
  8. ArrayUtils的简单学习
  9. 谈谈Ext JS的组件——布局的使用方法续二
  10. linux学习笔记(五):开机、关机、开机日志