zoukankan      html  css  js  c++  java
  • 初步研究java类的加载机制

          类加载是java运行的第一步,研究 类加载有助于了解JVM执行过程,并指导开发者采取更有效的方式配合程序执行;

          研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性。

    一、简单过程:

    java程序运行的场所是内存,当在命令行下执行:java HelloClassLoader的时候,JVM会将HelloClassLoader.class加载到内存中,并形成一个HelloClassLoader对象。

    其中的加载过程就是类加载过程:

    1.寻找jre目录,查找jvm.dll,并初始化JVM;

    2.产生一个Bootstrap Loader(启动类加载器);

    3.Bootstrap Loader自动加载Extended Loader(标准扩展类加载器),并将其父Loader设置为Bootstrap Loader;

    4.Extended Loader自动加载AppClass Loader(系统类加载器),并将其父Loader设置为Extended Loader;

    5.最后由AppClass Loader加载HelloClassLoader类。

    以上就是类加载的最一般的过程。

    二、类加载器的特点:

    1.运行一个程序时,总是由AppClassLoader(系统类加载器)开始加载指定的类;

    2.在加载类时,每个类加载器会将加载任务上交给其父,如果其父找不到,再由自己去加载;

    3.Bootstrap Loader(启动类加载器)是最顶级的加载器了,其父类加载器为null。

    如下:

     1 package com.qad.classLoader;
     2 
     3 public class HelloClassLoader {
     4     public static void main(String [] args){
     5         HelloClassLoader helloClassLoader = new HelloClassLoader();
     6         Class c = helloClassLoader.getClass();
     7         ClassLoader classLoader = c.getClassLoader();
     8         System.out.println(classLoader);
     9         System.out.println(classLoader.getParent());
    10         System.out.println(classLoader.getParent().getParent());
    11     }
    12 
    13 }

    结果是:

    sun.misc.Launcher$AppClassLoader@addbf1
    sun.misc.Launcher$ExtClassLoader@42e816
    null
    

      

  • 相关阅读:
    软件测试人员的要求
    冒烟测试和回归测试的区别
    [go]struct
    [go]socket编程
    [go]gorhill/cronexpr用go实现crontab
    [go]os/exec执行shell命令
    [go]time包
    [go]etcd使用
    [go]redis基本使用
    [go]go操作mysql
  • 原文地址:https://www.cnblogs.com/qadyyj/p/5694400.html
Copyright © 2011-2022 走看看