竹笋

注册

 

发新话题 回复该主题

JVM篇class类加载机制 [复制链接]

1#
美图镇楼

编写的java文件最终被编译为class文件,在运行期间将class文件加载到方法区,对文件流进行校验解析初始化,最终成为可以使用的java对象。Class文件加载到内存到从内存卸载经历了这些阶段:加载、连接、初始化、使用、卸载。其中连接有分为验证、准备、解析三个阶段,如下图。

类加载过程

我们重点研究下加载、连接、初始化这三个过程中发生了什么。

一、使用类加载器加载class文件

先让我们自定义一个类加载器,并初始化这个class对象,来初步体验下类加载到使用的过程,首先实现一个简单的class类

publicclassMgDemoSample{

publicvoidstartSample()

{

System.out.println(MgDemoSample);

}

}

使用javacMgDemoSample.java编译出class文件,将class文件放到E:/cltmp/目录下,然后创建一个URLClassLoader加载MgDemoSample,并实例化对象,通过反射执行startSample这个函数

URLurl=newURL(file:/E:/cltmp/);

URLClassLoaderloader=newURLClassLoader(newURL[]{url});

Classcl=loader.loadClass(MgDemoSample);

log.info(....{},cl.getName());

Objectinstance=cl.newInstance();

MethodmainMethod=cl.getMethod(startSample);

注意:如果报错Cantinitializejavacprocessordueto(mostlikely)aclassloaderproblem:java.lang.NoClassDefFoundError:

分享 转发
TOP
发新话题 回复该主题