jvm Classload method介绍

1,jvm Classload默认几个重要方法介绍

findClass:Finds and loads the class with the specified name from the URL search path.找到class文件并把字节码加载到内存中,如果自定义的加载器仅覆盖了findClass,而未覆盖loadClass(即加载规则一样,但加载路径不同);则调用getClass().getClassLoader()返回的仍然是AppClassLoader!因为真正load类的,还是AppClassLoader

defineClass:Converts an array of bytes into an instance of class. 创建类对象,将字节流解析成JVM能够识别的Class对象

loadClass:Loads the class with the specified binary name.自定义的加载器可以覆盖该方法loadClass(),以便定义不同的加载机制.例如Servlet中的WebappClassLoader覆盖了该方法,在WEB-INFO/classes目录下查找类文件;在加载时,如果成功,则缓存到ResourceEntry对象。——不同的加载机制。

2,其它一些方法

resolveClass:加载完字节码后,会根据需要进行验证、解析

defineClass:字节流解析成JVM能够识别的Class对象。不可覆盖

findLoadedClass:如果类已经加载过,则直接返回 Returns the class with the given name binary name if this loader has been recorded by the Java virtual machine as an initiating

3,调用规则:loadClass-->findClass-->defineClass--->resolveClass(可选)

4,JVM默认不能热部署类,因为加载类时会去调用findLoadedClass(),如果类已被加载,就不会再次加载。JVM判断类是否被加载有两个条件:完整类名是否一样、ClassLoader是否是同一个。

loadClass方法代码:

protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
        synchronized (getClassLoadingLock(name)) {
            // First, check if the class has already been loaded
            Class c = findLoadedClass(name);
            if (c == null) {
                long t0 = System.nanoTime();
                try {
                    if (parent != null) {
                        c = parent.loadClass(name, false);
                    } else {
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {
                    // ClassNotFoundException thrown if class not found
                    // from the non-null parent class loader
                }

                if (c == null) {
                    // If still not found, then invoke findClass in order
                    // to find the class.
                    long t1 = System.nanoTime();
                    c = findClass(name);

                    // this is the defining class loader; record the stats
                    sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                    sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                    sun.misc.PerfCounter.getFindClasses().increment();
                }
            }
            if (resolve) {
                resolveClass(c);
            }
            return c;
        }
    }

时间: 2024-10-15 16:37:27

jvm Classload method介绍的相关文章

JVM虚拟机的介绍 和 环境变量的配置

java001 JVM 在安装的时候,有几个小的插曲,什么呢? 1.在安装JDK后会再要求你重新安装JRE,其实这是没有必要的,因为JDK中已经包含JRE. 你可以通过查看JDK的JRE目录你会发现这个两个目录的包含的目录是一样的. 2.其实JDK的安装就是一个解压和复制的过程,所以可以把安装的文件目录拷到别的机器上运行,唯一的区别在于: 自己安装的同时会在系统注册表中注册相关的信息,假如产品有更新会提示更新,而直接拷贝的是不这样的. 3.bin目录下的.exe文件是由java写的所以他也是依赖

一个性能较好的jvm參数配置以及jvm的简单介绍

一个性能较好的webserverjvm參数配置: -server //服务器模式 -Xmx2g //JVM最大同意分配的堆内存,按需分配 -Xms2g //JVM初始分配的堆内存.一般和Xmx配置成一样以避免每次gc后JVM又一次分配内存. -Xmn256m //年轻代内存大小.整个JVM内存=年轻代 + 年老代 + 持久代 -XX:PermSize=128m //持久代内存大小 -Xss256k //设置每一个线程的堆栈大小 -XX:+DisableExplicitGC //忽略手动调用GC,

JVM -XX: 参数介绍

功能开关: 参数 默认值或限制 说明 参数 默认值 功能 -XX:-AllowUserSignalHandlers 限于Linux和Solaris,默认不启用 允许为java进程安装信号处理器,信号处理参见类:sun.misc.Signal, sun.misc.SignalHandler -XX:+DisableExplicitGC 默认启用 禁止在运行期显式地调用System.gc() -XX:+FailOverToOldVerifier Java6新引入选项,默认启用 如果新的Class校验

jvm监控命令介绍

1.jstack介绍 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题.另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的. 命令格式 $jstack [ option ] pid $jst

JVM相关参数介绍

JVM性能调优: JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小. 年轻代(New):年轻代用来存放JVM刚分配的Java对象 年老代(Tenured):年轻代中经过垃圾回收没有回

jdk jre jvm的简单介绍

jdk是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序. JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库. JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.

JVM -XX: 参数介绍(转)

功能开关: 参数 默认值或限制 说明 参数 默认值 功能 -XX:-AllowUserSignalHandlers 限于Linux和Solaris,默认不启用 允许为java进程安装信号处理器,信号处理参见类:sun.misc.Signal, sun.misc.SignalHandler -XX:+DisableExplicitGC 默认启用 禁止在运行期显式地调用System.gc() -XX:+FailOverToOldVerifier Java6新引入选项,默认启用 如果新的Class校验

精讲 JVM架构体系介绍

每个Java开发人员都知道字节码将由JRE(Java Runtime Environment)执行.但是许多人并不知道JRE是Java虚拟机(JVM)的实现,它可以分析字节码,解释代码并执行它.作为开发人员,了解JVM的体系结构非常重要,因为它使我们能够更高效地编写代码. 通过优锐课的jvm分享,在本文中,我们将更深入地了解Java中的JVM体系结构以及JVM的不同组件.分享给大家参考学习. 什么是JVM? 虚拟机是物理机的软件实现.Java是根据WORA(可在任何地方写入一次)的概念开发的,可

JVM垃圾收集器介绍

一.垃圾回收用到的主要算法 1.引用计数法 算法思路: 给对象中加入一个引用计数器.每当有一个地方引用他时,计数器值就加1:当引用失效时,计数器值就减1.当计数器的值为0时就能够把该对象删除. 算法长处: 实现简单,判定效率高 算法缺点: 难以解决对象之间相互循环引用的问题. 2.标记清除法 算法思路: 算法分为"标记"和"清除"两个阶段:首先标记出全部须要回收的对象.在标记完毕后统一回收全部被标记的对象. 算法长处: 算法缺点: 效率低,标记和清除两个过程效率都不