1

1.谈谈你对java的理解

clipboard.png

java怎么做到一次编译,处处运行的呢?(平台无关性)

clipboard.png

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

因为javac编译成字节码的时候就要检查语法错误,如果跳过这一环节的话,每次JVM都要进行语法的检查,大大的降低了执行的效率
clipboard.png

JVM怎么加载.Class文件
首先由jvm的classLoader(类加载器)把.class文件加载到内存中,然后由Excution Engine(解释器)去解析指令,最后交给操作系统去执行。
我们所写的程序都会被加载到运行数据区里面。
clipboard.png

什么叫做反射?

clipboard.png
例子
getMethod:可以获取public修饰的属性和方法,也可以获取继承或实现父类的方法,但是不能访问private
getDeclareMethod:可以访问private修饰的属性和方法,但是不能获取继承或实现父类的方法
clipboard.png

clipboard.png

jvm之java类加载机制和类加载器(ClassLoader)以及双亲委派模型详解
这篇文章讲的非常好
https://blog.csdn.net/m0_3807...

怎么自定义自己的ClassLoader

1.通过二进制字节流的方式加载字节码文件,然后通过defineClass返回Class对象。
clipboard.png

类的加载方式(什么时候加载类)

clipboard.png

loadClass和forName的区别

clipboard.png
Class.forName执行了加载,连接,初始化的操作,以mysql驱动为例,初始化时执行静态代码块,生成了一个完整的Driver对象,而loadClass只是执行了加载和链接的过程,并没有初始化,这种也有好处,在spring中加载配置文件,使用懒加载的方式可以大大提高类的加载速度。
如Class.forName("com.mysql.jdbc.Driver")

clipboard.png

clipboard.png

JVM内存模型

clipboard.png

1.程序计数器

clipboard.png

2.java虚拟机栈
包含了局部变量表,操作数栈,方法出口和动态链接
clipboard.png

解释一下局部变量表,操作数栈(就是入栈,出栈,复制,运算等操作)

clipboard.png
思考?

clipboard.png

答:递归过深,栈帧数超出虚拟机栈深度

clipboard.png

3.本地方法

clipboard.png

4.元空间(MetaSpace)与永久代(PermGen)的区别?
(1)元空间和永久代都是方法区的实现
(2)jdk8以后移除了永久代,换成了元空间
(3)元空间使用的是本地内存,永久代使用的是jvm的内存
使用元空间的优势?

clipboard.png
5.堆
clipboard.png

常见面试题:
1.一般讲堆的初始值和堆的最大值设置为相等,避免垃圾回收之后重新分配内存。
clipboard.png
2.Java内存模型中堆和栈的区别-内存分配策略

clipboard.png

3.接下来举一个例子串联jvm
程序:

clipboard.png
指向
clipboard.png

4.不同JDK版本之间的intern()方法的区别(JDK6和JDK6+)
这篇博客写的很好,这里转载一下
https://www.jianshu.com/p/d5e...
clipboard.png

JDK6的情况

false,false
clipboard.png
JDK6+
false,true
clipboard.png


BISKEE
14 声望1 粉丝

« 上一篇
redis技术总结
下一篇 »
GC

引用和评论

0 条评论