1、jvm的运行流程
2、jvm的基本结构:
- 类加载器
- 执行引擎
- 本地方法库
- 运行时数据区(重点关注)
- 方法区;2. java堆(Heap);3. java栈(Stack);4. 本地方法栈;5. 程序计数器(PC Register)
3、类的装载过程
加载--》连接(验证、准备、解析)--》初始化--》使用--》卸载
class文件 ---保存类的定义或结构 ----- 保存在堆中
4、什么是初始化?
执行类的构造器,为类的静态变量赋予正确的初始值。
5、什么是构造器?
构造器包含1.static变量;2.static{ } 语句
public static int tmp = 2;
static{
tmp = 3;
}
6、构造器和构造方法有什么不同?
构造器:构造对象;
构造方法:实例化对象。
先执行构造器,再执行构造方法。
7、为什么要使用双亲委派机制?
为了防止重复加载,不产生安全隐患。比如:我们自己定义了一个String类。
8、JDK已有的类加载器
- 启动类加载器 BootStrap Classloader(C++编写的) --》 加载rt.jar等
- 扩展类加载器 Extension Classloader(JAVA编写的) --》 加载%JAVA_HOME%/lib/ext/*.jar
- 应用程序类加载器 Application Classloader(JAVA编写的) --》 加载CLASSPATH,.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
- 自定义类加载器 Custom Classloader --》 完全自定义加载路径
9、启动类加载器的源码在哪里?以ClassLoader为例:
(JDK的启动类加载器并不是只加载rt.jar一个,而是JRE System Library目录下所有的jar包)
10、自定义类加载器