1、什么是字节码文件?
字节码文件是java文件编译后的文件,.Java文件经过javac编译就是字节码文件
2、字节码文件有什么作用?**
可以提高Java的运行速率
将java代码先进行编译成字节码文件再通过JVM运行会节省时间,如果直接使用JVM进行运行Java文件会很慢很慢
3、Java为什么可以跨平台运行?
每个操作系统中都安装着不同版本的JVM(无论是Linux、Windows、Mac OS)
如果可以将别的语言也编译成字节码文件,这个语言也支持跨平台运行
4、JVM整体结构:
类加载子系统:编译后的字节码文件在磁盘中,类加载子系统可以将字节码文件从磁盘加载到内存空间中
方法区:方法区中存放的类的各种信息
解释器:执行字节码指令,翻译成机器指令,对于热点指令每次都需要重新翻译,效率很低,于是有了JIT编译器
JIT编译器:将字节码指令编译成机器指令,缓存起来,从而提高执行效率(只会处理一些热点指令,也就是经常使用的指令)
堆:执行字节码指令的时候,产生的Java对象,就放在堆中
Java方法栈:在执行某个方法的时候,这个方法的参数和一些列信息都会存进入Java方法栈中(执行的是Java方法)
本地方法栈:存放本地方法执行的相关信息(执行的是本地方法)
程序计数器:在执行指令的时候,可能会切换线程,作用就是记录下一条需要执行的指令的地址,方便找到
5、类加载器的分类
作用:通过javac将.java文件编译成.class字节码文件后,将.class加载到JVM中运行
引导类加载器:BootStrapClassLoader
自定义类加载器:编写一个java类,继承实现ClassLoader类(ExtClassLoader、AppClassLoader、CustomClassLoader)
6、双亲委派
定义:双亲委派机制是当类加载器需要加载某一个.class字节码文件时,则首先会把这个任务委托给他的上级类加载器,递归这个操作,如果上级没有加载该.class文件,自己才会去加载这个.class。
作用:避免类的重复加载,防止核心API被纂改
7、Tomcat为什么要自定义类加载器?