一、JAVA底层知识:JVM
1.谈谈你对JAVA的理解
平台无关性,GC(垃圾回收机制),语言特性(泛型,反射,lambda表达式),面向对象(封装继承多态),类库(IO库等),异常处理
2.平台无关性如何实现
JAVA源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,JAVA虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令。javap指令查看字节码。
3.为什么JVM不直接将源码解析成机器码去执行
准备工作:每次执行都需要各种检查 兼容性:可以将别的语言解析成字节码
4.JVM如何加载.class文件
JVM是一个内存中的虚拟机,即JVM的存储就是内存,JVM架构主要分为四个部分:
Class Loader:依据特定格式,加载class文件到内存
Execution Engine:对命令进行解析
Native Interface:融合不同开发语言的原生库JAVA所用
Runtime Data Area:JVM内存空间结构模型
5.谈谈JAVA反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为JAVA语言的反射机制。深入学习:https://blog.csdn.net/sinat_38259539/article/details/71799078
6.类从编译到执行的过程
编译器将Robot.java源文件编译为Robot.class字节码文件
Class Loader将字节码转换为JVM中的Class<Robot>对象
JVM利用Class<Robot>对象实例化为Robot对象
7.谈谈Class Loader
Class Loader 在JAVA中有着非常重要的作用,它主要工作在Class装载的加载阶段,其主要作用是从系统外部获得Class二进制数据流。它是JAVA的核心组件,所有的Class都是由Class Loader 进行加载的,Class Loader 负责通过将Class文件里的二进制数据流装载进系统,然后交给JAVA虚拟机进行连接、初始化等操作。
深入学习:还需补充
8.谈谈Class Loader的双亲委派机制
Custom ClassLoader,App ClassLoader,Extension ClassLoader,Bootstrap ClassLoader(C++编写)
自左向右检查类是否已经加载,自右向左尝试加载类。
why:避免多份同样字节码文件的加载
9.加载方式
隐式加载:new
显示加载:loadClass,forName等
10.loadClass 和 forName 的区别
相同点:对于任意一个类,都能知道类的所有属性和方法,对于任意一个对象,都能调用它的任意方法和属性。
类的装载过程:
加载:通过ClassLoader加载class文件字节码,生成Class对象
链接:校验:检查加载class的正确性和安全性。 准备:为类变量分配存储空间并设置类变量初始值。 解析:JVM将常量池内的符号引用转换为直接引用。
初始化:执行类变量赋值和静态代码块。
不同点:loadClass 执行到加载过程。 forName执行到初始化过程。
11.