类的生命周期

  当Sample类被载入、连接和初始化后,它的生命周期就開始了。

  当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期。Sample类在方法区内的数据也会被卸载,从而结束Sample类的生命周期。

  由此可见,一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期

 

引用关系

  载入器和Class对象:

  在类载入器的内部实现中,用一个Java集合来存放所载入类的引用。

  还有一方面,一个Class对象总是会引用它的类载入器。

调用Class对象的getClassLoader()方法。就能获得它的类载入器。

  由此可见,Class实例和载入它的载入器之间为双向关联关系

 

  类、类的Class对象、类的实例对象:

  一个类的实例总是引用代表这个类的Class对象。

  在Object类中定义了getClass()方法。这种方法返回代表对象所属类的Class对象的引用。

  此外。全部的Java类都有一个静态属性class,它引用代表这个类的Class对象。

 

类的卸载

  由Java虚拟机自带的类载入器所载入的类,在虚拟机的生命周期中,始终不会被卸载。

  前面介绍过,Java虚拟机自带的类载入器包含根类载入器扩展类载入器系统类载入器

  Java虚拟机本身会始终引用这些类载入器。而这些类载入器则会始终引用它们所载入的类的Class对象。因此这些Class对象始终是可触及的

 

  由用户自己定义的类载入器载入的类是能够被卸载的。

 

详细样例

 

 

  loader1变量和obj变量间接应用代表Sample类的Class对象。而objClass变量则直接引用它。

 

  假设程序执行过程中。将上图左側三个引用变量都置为null,此时Sample对象结束生命周期。MyClassLoader对象结束生命周期,代表Sample类的Class对象也结束生命周期,Sample类在方法区内的二进制数据被卸载

 

  当再次有须要时,会检查Sample类的Class对象是否存在。假设存在会直接使用,不再又一次载入;假设不存在Sample类会被又一次载入,在Java虚拟机的堆区会生成一个新的代表Sample类的Class实例(能够通过哈希码查看是否是同一个实例)。

关于类的卸载机制转自:http://www.cnblogs.com/mengdd/p/3594608.html

 

JVM中类的卸载机制的更多相关文章

  1. Java虚拟机JVM学习07 类的卸载机制

    Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...

  2. 03 JVM的垃圾回收机制

    1.前言 理解JVM的垃圾回收机制(简称GC)有什么好处呢?作为一名软件开发者,满足自己的好奇心将是一个很好的理由,不过更重要的是,理解GC工作机制可以帮助你写出更好的Java程序. 在学习GC前,你 ...

  3. JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

     相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术 ...

  4. JVM之虚拟机类加载机制

    有兴趣可以先参考前面的几篇JVM总结: JVM自动内存管理机制-Java内存区域(上) JVM自动内存管理机制-Java内存区域(下)     JVM垃圾收集器与内存分配策略(一) 我们知道,在编写一 ...

  5. JVM虚拟机—JVM的垃圾回收机制(转载)

    1.前言 理解JVM的垃圾回收机制(简称GC)有什么好处呢?作为一名软件开发者,满足自己的好奇心将是一个很好的理由,不过更重要的是,理解GC工作机制可以帮助你写出更好的Java程序. 在学习GC前,你 ...

  6. JVM的内存管理机制-转载

    JVM的内存管理机制 一.JVM的内存区域 对于C.C++程序员来说,在内存管理领域,他们既拥有每一个对象的"所有权",又担负着每一个对象生命开始到终结的维护责任. 对Java程序 ...

  7. JVM的垃圾回收机制详解和调优

    JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...

  8. JVM的内存管理机制

    在做Java开发的时候常用的JVM内存管理有两种,一种是堆内存,一种是栈内存.堆内存主要用来存储程序在运行时创建或实例化的对象与变量,例如:我们通过new MyClass()创建的类MyClass的对 ...

  9. JVM的垃圾回收机制

    JVM的垃圾回收机制:(GC通过确定对象是否被活动对象引用来确定是否收集该对象.) 1.触发GC(Garbage Collector)的条件. (1.GC在优先级最低的线程中运行,在未运行的线程中进行 ...

随机推荐

  1. Android 脚本设计之 SL4A

    SL4A的全称为Scripting Layer for Android, 顾名思义就是Android的脚本架构层,它的目的就是可以用熟知的脚本开发语言来开发Android应用程序.其工作原理基于RPC ...

  2. Go 收藏

    Golang 定位解决分布式系统,服务器应用开发,主要竞争对手是 Java.Python 之类:Rust 定位解决单机安全问题,高性能场景偏系统底层开发,主要竞争对手就是 C 和 C++. Golan ...

  3. MVC二级联动使用$.ajax方法获取后端返回的字符串

    在"MVC二级联动使用$.getJSON方法"中使用$.getJSON()获取后端返回的JSon. 本篇使用jQuery的$.ajax()获取后端返回的字符串,实现二级联动.   ...

  4. DocumentManager 在标签位置显示气泡框 z

    关于DevExpress DockManager下的DocumentManager头部标签如何显示气泡框,类似Visual studio那样显示文件的路径,如下图所示,------- 方式很简单,从工 ...

  5. dwz tabs table实现翻页及各tabs查询

    效果如图:

  6. sql查询前后两位

    SQL排名的问题,A这个人在数据库里排第十,怎么查询一个他前面两位,后面两位,包括自己的五条数据,各位有啥高招? DECLARE @table TABLE ( id INT PRIMARY KEY , ...

  7. C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

    面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...

  8. 把NDK的工具链提取出来单独使用

    独立toolchain 把NDK压缩包解压到系统,如/mnt目录下,后在/mnt目录下建立文件夹my_ndk_toolchain,然后再/mnt目录下执行以下命令:/mnt/android-ndk-r ...

  9. numpy转换

    csv2npy cccsv=numpy.genfromtxt('/root/c.csv', delimiter = ',') buf2npy imga=numpy.frombuffer(buf,num ...

  10. 《Java核心技术 卷II 高级特性(原书第9版)》

    <Java核心技术 卷II 高级特性(原书第9版)> 基本信息 原书名:Core Java Volume II—Advanced Features(Ninth Edition) 作者: ( ...