随谈Java - (三) 对象的生命周期

1、类加载
  • 类加载器将类信息加载到JVM的内存(方法区)
  • 为静态变量分配内存并赋零值,常量则直接赋值
  • 如果符合以下情况则执行类的初始化方法:为静态变量赋值、执行静态代码块
    • 通过new关键字实例化对象、读取或设置类的静态变量、调用类的静态方法
    • 通过反射方式执行以上三种行为
    • 初始化子类的时候会触发父类的初始化
    • 作为程序的入口直接运行(main方法)

注1:可使用javap -c 可以看出JVM会把静态变量的赋值合并到静态代码块
注2:如果直接使用类加载器加载类不会触发执行类的初始化方法

> 追踪类加载的参数
1)-XX:+TraceClassLoading:加载
2)-XX:+TraceClassUnloading:卸载
3)-verbose:class:等价于上面两个
2、创建对象
  • 为成员变量分配内存并赋零值
  • 执行对象的初始化方法:为变量赋值,执行普通代码块,执行构造方法

注:可使用javap -c 可以看出JVM会把成员变量的赋值、普通代码块合并到构造方法(重载的构造方法也会)

3、GC
  • 可达性检测
  • 执行finalize()方法
  • 回收
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 571评论 0 2
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,821评论 0 11
  • 一 、java虚拟机底层结构详解 我们知道,一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、...
    葡萄喃喃呓语阅读 1,584评论 0 4
  • 一、初始化初识 1. 初始化是什么 Java语言规范中了Java有两种数据类型:简单类型和引用类型。 简单类型包括...
    HRocky阅读 626评论 0 1
  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 1,298评论 0 2

友情链接更多精彩内容