字节码
如果你问我什么是字节码,那我现在只能告诉你字节码是java源程序经过编译器编译后的字节码文件(.class),不面向任何的处理器,只面向虚拟机。通俗来讲,就是你写的代码由人的语言转换为机器语言。
字节码相当于是一个桥梁,由编译器转化为字节码,再由JVM解释器转化为可运行的二进制机器码
字节码的优点
首先理解一个概念,解释型语言和编译型语言。
解释型语言是一边执行一边翻译为机器语言,执行效率低。
编译型语言是先由编译器一次性翻译为机器语言,比如(.exe) 。无需再次编译,因此运行效率较高。编译型语言的程序在首次执行时编译生成可执行文件,之后可以直接运行这个文件,无需源代码和编译器。
所以字节码的出现一定程度上解决了编译型语言运行速度慢的问题,也可以发挥解释性语言可移植性的特点。
当然,理解到这里突然有不明白可移植性是什么意思,查了一下,其实就是可以在不同操作系统部署运行的能力
顺便拓展一下类加载器的学习,简单记录一下。
Bootstrap ClassLoader 加载核心类库,比如java.lang.Object
ExtClassLoader 加载工具扩展类, 比如java.util
AppclassLoader加载应用程序类,我们自定义的类
自定义类加载器-必须继承ClassLoader
双亲委派模型
这张图很直观的描述了java加载类的顺序,先向上查找缓存,找到则返回,找不到则再向下查找加载路径