JVM面试题--基础版

谈谈你对JAVA的理解

平台无关性,GC,语言特性,面向对象,类库,异常处理

平台无关性如何实现?

JAVA源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,JAVA虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令

为什么JVM不直接将源码解析成机器码去执行

每次执行都需要语句,句法,语义的各种检查

提高兼容性:也可以将别的语言解析成字节码

JVM如何加载.class文件

使用ClassLoader依据特定格式将class文件加载到Runtime Data Area内存中,使用Execution Engine解析文件的字节码,并提交给操作系统去执行

Class Loader:依据特定格式,加载class文件到内存中

Execution Engine【解释器】:对命令进行解析

Native Interface:融合不同开发语言的原生库为JAVA所用

Runtime Data Area:JVM内存空间结构模型

谈谈反射

在运行时分析类的能力

在运行时查看对象

实现通用的数组操作代码

利用Method对象,这个对象很像c++中的函数指针,反射机制允许你调用任意方法

反射是一种功能强大且复杂的机制,使用它的主要人员是工具构造者,而不是应用程序员

类从编译到执行的过程

编译器将Robot.java源文件编译为Robot.class字节码文件

ClassLoader将字节码转换为JVM中的Class<Robot>对象

JVM利用Class<Robot>对象实例化为Robot对象

谈谈ClassLoader

ClassLoader在JAVA中有着非常重要的作用,它主要工作在Class装载的加载阶段,其主要作用是从系统外部获得Class二进制数据流。它是JAVA的核心组件,所有的Class都是由ClassLoader进行加载的。ClassLoader负责通过将Class文件里的二进制数据流装载进系统,然后交给JAVA虚拟机进行连接,初始化等操作

ClassLoader的种类

BootStrapClassLoader:C++编写,加载核心库java.*

ExtClassLoader:JAVA编写,加载扩展库javax.*

AppClassLoader:JAVA编写,加载程序所在目录

自定义ClassLoader:JAVA编写,定制化加载

谈谈类加载器的双亲委派机制

自下而上检查是否已经加载,如果加载则直接返回,如果没有加载,则自上而下去寻找类,然后加载,加载成功直接返回

为什么要使用双亲委派机制去加载类

避免多份同样字节码的加载

类的加载方式

隐式加载:new

显示加载:loadClass与forName

loadClass与forName的区别?

Class.forName得到的class是已经初始化完成的

ClassLoader.loadClass得到的class是还没有链接的

Class.forName除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。

classloader只是将.class文件加载到jvm中,不会执行static中的内容,只有在newIn

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java之项目解析+八股文 文章被收录于专栏

针对Java简历中项目的功能进行提问,大家可以在评论区中解答/讨论;同时提供八股文

全部评论

相关推荐

1 10 评论
分享
牛客网
牛客企业服务