一:jvm包括内容:(面试一问:介绍下jvm的内容)
- 类加载器(ClassLoader):在jvm启动时或者类运行时将需要的class加载到Jvm中
- 执行引擎:负责执行class文件中保含的字节码指令
- 内存区(运行时数据区) :是jvm运行时候操作的所分配的内存区。
- 本地方法接口:主要调用C或者C++实现的本地方法返回结果
二:类加载器内容
- 引导类加载器:负责加载jre的lib目录下的核心类库,如rt.jar
- 扩展类加载器:负责加载jre的lib目录下的ext扩展目录下的jar包
- 应用程序加载器:负责加载classPath下载类,主要是自己创建的那些类
加载流程:(双亲委派机制)
解释下双亲委派或者加载流程::: 当一个类被执行时:应用程序类判断自己否加载过,没有就向上委托扩展类加载器加载,它再判断下,没有再次向上委托引导类加载器。如果还没有,最后由应用程序加载器加载。
面试一问:能不能自己写个类叫做java.lang.System
不可以:会报错(找不到方法什么的),类加载采用委派机制,应用程序加载器是没有机会加载这个类的。它会向上委托。上层加载器加载过这个类,直接会调用,但是类里面的内容是不一样的,所以就会报错。