Java虚拟机典范卸载和典范更新解析[Java编程]
本文“Java虚拟机典范卸载和典范更新解析[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
首先看一下,关于java虚拟机标准中时若何阐述范例卸载(unloading)的:
A class or interface may be unloaded if and only if its class loader is unreachable. The bootstrap class loader is always reachable; as a result,system classes may never be unloaded.
Java虚拟机标准中关于范例卸载的内容就这么简单两句话,大致意思就是:只有当加载该范例的类加载器实例(非类加载器范例)为unreachable状况时,当前被加载的范例才被卸载.启动类加载器实例永久为reachable状况,由启动类加载器加载的范例大概永久不会被卸载.
我们再看一下Java语言标准供应的关于范例卸载的更具体的信息(部份摘录):
//摘自JLS 12.7 Unloading of Classes and Interfaces
1、An implementation of the Java programming language may unload classes.
2、Class unloading is an optimization that helps reduce memory use. Obviously,the semantics of a program should not depend on whether and how a system chooses to implement an optimization such as class unloading.
3、Consequently,whether a class or interface has been unloaded or not should be transparent to a program
通过以上我们可以得出结论: 范例卸载(unloading)仅仅是作为一种削减内存利用的性能优化办法存在的,具体和虚拟机实现有关,对开辟者来说是透明的.
纵观java语言标准及其相关的API标准,找不到显示范例卸载(unloading)的接口,换句话说:
1、一个已经加载的范例被卸载的概率很小至少被卸载的时间是不肯定的
2、一个被特定类加载器实例加载的范例运行时可以认为是无法被更新的
【范例卸载进一步解析】
前面提到过,假如想卸载某范例,必须保证加载该范例的类加载器处于unreachable状况,目前我们再看看有 关unreachable状况的注释:
1、A reachable object is any object that can be accessed in any potential continuing computation from any live thread.
2、finalizer-reachable: A finalizer-reachable object can be reached from some finalizable object through some chain of references, but not from any live thread. An unreachable object cannot be reached by either means.
某种程度上讲,在一个略微复杂的java利用中,我们很难精确判断出一个实例能否处于unreachable状况,所 认为了越发精确的逼近这个所谓的unreachable状况,我们下面的测试代码尽大概简单一点.
以上是“Java虚拟机典范卸载和典范更新解析[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |