易截截图软件、单文件、免安装、纯绿色、仅160KB

Java 类装入器原理

 
转载自http://blog.csdn.net/yuekun1172006/archive/2007/06/02/1634878.aspx
类装入器是 JVM 用来装入类的类,它对于 Java 编程是非常重要的一个概念。一般情况下,程序员在编写程序的时候都可以忽略类装入器的存在性。但是对于服务器端编程或者是一些特殊情况下时候,深入了解类装入器的机制以及其在不同情况下的实现还是非常必要的。
首先,当一个 JVM 启动的时候,Java 缺省开始使用三个类装入器。它们分别是:
引导(Bootstrap)类装入器;
扩展(Extension)类装入器;
系统(System)类装入器;
它们分别实现如下的功能:
引导类装入器是用本地代码实现的类装入器。它负责将 <Java_Runtime_Home>/lib
下面的类库加载到内存中。
扩展类装入器是由 Sun 的 ExtClassLoader 实现的。它负责将 < Java_Runtime_Home >/lib/ext
或者由系统变量 java.ext.dir 指定位置中的类库加载到内存中。
系统类装入器又叫应用程序类装入器,是由 Sun 的 AppClassLoader 实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。

应用程序需要加载某个类到内存中的时候,类装入器是如何工作的呢?这就设计到类装入器的一个重要方面:代理机制。每一个类装入器,除了引导类装入器以外,
都有一个父类装入器。对于系统缺省定义的三个类装入器,引导类装入器是扩展类装入器的父类装入器,而扩展类装入器是系统类装入器的父类装入器。当然,应用
程序也可以使用自己的类装入器来使用特定的方法来装载类,因此,整个系统中的类装入器就形成一个树状结构。
当使用某个类装入器来试图装载某个类的时候,该类装入器会首先使用其父类装入器来试图装载该类。对于每一个装载进来的类,JVM 都会给其分配一个唯一的 ID。因此,不同类装入器可以装载同一个类到 JVM 中。例如,对于如下图结构的 ClassLoaderA
和 ClassLoaderB


图 1 类装入器的结构





假设类 C
在系统类装入器指定的类路径中,则无论是使用 ClassLoaderA
还是使用 ClassLoaderB
,都只会得到同样一个类 C

但是如果类 C
分别在 ClassLoaderA
以及 ClassLoaderB
指定的类库中,则使用 ClassLoaderA
得到到类 C
实例会不同于 ClassLoaderB
得到的类 C
实例。尽管两个类装入器在同一个 JVM 中。
上面的类装入器的向上代理结构看上去很完美了,但是,当系统变得复杂的时候,就还是显得不够用了。


相关文档:

java入门

 Java学习从入门到精通 
一、 JDK (Java Development Kit) 
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......

JAVA JNI 使用实例

 JAVA可以通过JNI接口访问本地的动态连接库,从而扩展JAVA的功能。使用JAVA JNI接口主要包括以下步骤:
(1)编写JAVA代码,注明要访问的本地动态连接库和本地方法;
(2)编译JAVA代码得到.class文件;
(3)使用javah -jni 生成该类对应的C语言.h文件;
(4)使用C/C++实现(3)生成的.h文件中声明的各函数;
(5)编译C/ ......

1、怎样学习Java?

 1.了解Java的原理:
       首先要了解整个Java的大致结构、工作环境、历史。在这个过程中要搞明白Java从源代码到最后虚拟机里面执行的一个过程是怎样的。
2.学习Java语法:
      Java里面只有50多个关键字和一些运算符。语法结构就只有顺序、条件、循环 ......

关于 java swing 中的repaint 和 revalidate 含义

   repaint 对组件进行重绘,比如一个panel,当你remove掉panel里面的一个组件时,你必须调用repaint方法才能对panel进行重绘,进行刷新,你想要删除的组件才能在界面上消失。
   revalidate 对组件进行验证,比如一个panel,当你remove掉panel里面的一个组件时,当你调用revalidate方法后,panel的布 ......

java中synchronized用法

synchronized的一个简单例子
public class TextThread
{
 /**
  * @param args
  */
 public static void main(String[] args)
 {
  // TODO 自动生成方法存根
        TxtThread tt = new TxtThread();
      ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号