JVM是Java语言可以跨平台、保持高发展的根本,没有了JVM. Java语言将失去运行环,境。针对Java程序的性能优化一定不可能避免针对JVM的调优,随着JVM的不断发展,我们的应对措施也在不断地跟随、变化,内存的使用逐渐变得越来越复杂。所有高级语言都需要垃圾回收机制的保护,所以GC就是这么重要。
JVM标准结构
类的加载机制
一:装载(load)
由ClassLoader负责加载; (ClassNotFoundException)
复制代码
1 二:链接(Link)
校验(verify)、准备(Prepare)、初始化静态变量赋默认值;
(NoClassDefFoundError)
复制代码
1 2 3 三:初始化
执行静态初始化代码、赋值静态变量。
复制代码
1 ClassLoader
一:BootStrap ClassLoader
由Sun用C++实现此类,JDK启动时负责加载jre/lib/rt.jar里的所有
class,及java规范中定义的接口及实现;
复制代码
1 2 3 二:Extension ClassLoader
JVM用于加载扩展功能的jar包,如DNS.jar
Jdk中的名称:sun.misc.Launcher$ExtClassLoader
复制代码
1 2 3 三:System ClassLoader
加载启动参数中指定ClassPath的Jar包
Jdk中的名称: sun.misc.Launcher$AppClassLoader
一般的程序使用的都是AppClassLoader
复制代码
1 2 3 4 5 四:自定义ClassLoader
用户也可以自定ClassLoader用于加载其他路径的Jar如网络上加载
复制代码
1 类的执行机制
虽然类已加载成功且静态属性及实例对象皆以创建,但是,执行静态方法或者实例方法时仍需要对JVM字节码进行处理。
JVM有以下三种执行方式:
(1):解释执行
(2):编译执行
(3):反射执行
解释执行
采用经典的冯诺依曼FDX循环方式,即获取下一条指令,解码并分派,然后执行。
解释执行的优点:简单、占资源少、启动速度快
解释执行的缺点