类的生命周期

  当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. PHPExcel 导出2003和2007的excel文档实例

    require_once 'common/excel/PHPExcel.php'; require_once 'common/excel/phpExcel/Writer/Excel2007.php'; ...

  2. linux系统时间同步,硬件时钟和系统时间同步,时区的设置

           1.时间同步(手动): date -s "2015-07-15 22:13:30" hwclock --systohc   (表示系统时间同步到硬件时钟) hwclo ...

  3. adb root : adbd cannot run as root in production builds

    在有些android手机上使用adb root希望获取root权限时出现如下提示信息:adbd cannot run as root in production builds.此时提升root权限的方 ...

  4. STLink download/debug interface for Linux.

    http://arm-utilities.googlecode.com/svn-history/r47/trunk/stlink-download/stlink-download.c /* STLin ...

  5. 实效云计算用户组(ECUG) 与 阿里云

    http://www.ecug.org/ http://www.aliyun.com/   阿里云

  6. Mongodb后台daemon方式启动

    Mongodb可以通过命令行方式和配置文件的方式来启动,具体命令如下: 命令行: [root@localhost mongodb]# ./bin/mongod --dbpath=/data/db 配置 ...

  7. js获取本机mac地址,IP地址,计算机名

    <!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> < ...

  8. C#调用DLL各种传参

    C++#define JNAAPI extern "C" __declspec(dllexport) // C方式导出函数 typedef struct { int osVersi ...

  9. GNU GRUB

    Introduction GNU GRUB is a Multiboot boot loader. It was derived from GRUB, the GRand Unified Bootlo ...

  10. ELK kibana查询与过滤

    在kibana中,可通过搜索查询过滤事务或者在visualization界面点击元素过滤. 创建查询 在Discover界面的搜索栏输入要查询的字段.查询语法是基于Lucene的查询语法.允许布尔运算 ...