首页 > 编程语言 >Java对象的生命周期

Java对象的生命周期

时间:2022-11-01 12:42:08浏览次数:36  
标签:生命周期 Java 对象 虚拟机 回收 GC 引用 Roots


分享知识 传递快乐

 

Java对象的生命周期包括创建、使用、回收三个过程。

 

1、对象的创建

当运行时执行代码遇到new指令、反序列化、反射、克隆时会创建新的对象。创建对象的过程如下:

Java对象的生命周期_对象的回收

2、对象的使用

java栈上的reference只存储了对象的引用,至于如何通过这个引用去定位、访问堆中的对象的具体位置则取决于虚拟机实现而定,目前主流的访问方式有使用句柄和直接指针。

使用句柄访问:

Java对象的生命周期_java_02

使用直接指针访问:

Java对象的生命周期_java_03

3、对象的回收

对象的回收就是我们常说的垃圾回收,垃圾回收是整个java虚拟机中重要的一块。

1)可达性分析算法

什么样的对象需要回收?不再被外部引用的对象需要被回收(这个答案不够严谨)。虚拟机是如何判断对象对象不再被引用的呢?虚拟机通过可达性分析算法来判定对象是否不再被引用。这个算法的基本思路是通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当GC Roots到某个对象没有任何引用链相连时,则称GC Roots到这个对象不可达,则说明此对象是不可用的、是可回收对象。什么样的对象能作为GC Roots对象呢?一般包括:虚拟机栈中引用的对象、类静态属性引用的对象、常量引用的对象、Native方法引用的对象。可达性分析算法判定对象是否可回收的示意图如下:

Java对象的生命周期_创建对象过程_04

 

2)可回收对象回收的时机

可回收对象什么时候进行回收?当堆中已使用内存达到一定的阈值时触发垃圾回收。垃圾回收的细节内容很多,请自行查阅。

 

 

 

 

 

 

 

 

 

 

———————————
相互学习,共同进步
如有不足请留言指正

标签:生命周期,Java,对象,虚拟机,回收,GC,引用,Roots
From: https://blog.51cto.com/u_15856116/5813255

相关文章

  • Java中static、final、static final的区别
    分享知识传递快乐 finalfinal可以修饰:属性,方法,类,局部变量(方法中的变量)final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。final修饰的属性跟具体对......
  • dom4j操作XML时转换对象时提示:对实体
    分享知识传递快乐 收到一个报文,需要将报文转成实体类。但报文中有几个URL。在转换的时DocumentHelper.parseText(xmlStr)抛出异常,返回org.dom4j.DocumentException:E......
  • mybatis-java中的几类错误
    目录mybatis-java中的几类错误1.第一种错误类型1.1namespace1.2一致性问题1.3构建1.4配置文件导不出来2.第二种类型错误2.1Error:java:错误:不支持发行版本2.2Except......
  • Java链式编程和Lombok实现链式编程
    分享知识传递快乐一、Java链式编程1.什么是链式编程链式编程的原理就是返回一个this对象,就是返回对象本身,以达到链式编程的效果。链式编程比较简单,只要returnthis即可具......
  • java 数组新增
    数组由于一开始就设定了长度,所以是不能直接新增的。但是可以通过其他方法来实现。思路1:通过Arrays.asList()方法转换为ArrayList,调用ArrayList的add方法进行新增,最后再调......
  • Java多线程-线程生命周期(一)
    如果要问我Java当中最难的部分是什么?最有意思的部分是什么?最多人讨论的部分是什么?那我会毫不犹豫地说:多线程。Java多线程说它难,也不难,就是有点绕;说它简单,也不简单,需要理......
  • 探针技术-JavaAgent 和字节码增强技术-Byte Buddy
    探针技术-JavaAgent和字节码增强技术-ByteBuddy 能够基于JavaAgent编写出普通类的代理理解ByteBuddy的作用能够基于ByteBuddy编写动态代理1ByteBuddyByte......
  • java Stream流练习
    1.遍历/匹配(foreach/find/match)Stream也是支持类似集合的遍历和匹配元素的,只是Stream中的元素是以Optional类型存在的。Stream的遍历、匹配非常简单。List<Integer>list......
  • 利用java数组实现栈
    栈作为被广泛使用的数据结构,是在一个特定范围的存储单元中存储的数据,这些数据可以重新被取出使用,与线性表相比,它们的插入和删除受到更多的约束和限定,所以又称为限定性的线性......
  • 创建对象的五种方式
    创建对象的五种方式Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码:创建对象方法是否调用构造函数使用new关键字}→调用了构造函数使用Class类的newInstanc......