1.谈谈你对java的理解
java怎么做到一次编译,处处运行的呢?(平台无关性)
为什么JVM不直接将源码解析成机器码去执行?
因为javac编译成字节码的时候就要检查语法错误,如果跳过这一环节的话,每次JVM都要进行语法的检查,大大的降低了执行的效率
JVM怎么加载.Class文件
首先由jvm的classLoader(类加载器)把.class文件加载到内存中,然后由Excution Engine(解释器)去解析指令,最后交给操作系统去执行。
我们所写的程序都会被加载到运行数据区里面。
什么叫做反射?
例子
getMethod:可以获取public修饰的属性和方法,也可以获取继承或实现父类的方法,但是不能访问private
getDeclareMethod:可以访问private修饰的属性和方法,但是不能获取继承或实现父类的方法
jvm之java类加载机制和类加载器(ClassLoader)以及双亲委派模型详解
这篇文章讲的非常好
https://blog.csdn.net/m0_3807...
怎么自定义自己的ClassLoader
1.通过二进制字节流的方式加载字节码文件,然后通过defineClass返回Class对象。
类的加载方式(什么时候加载类)
loadClass和forName的区别
Class.forName执行了加载,连接,初始化的操作,以mysql驱动为例,初始化时执行静态代码块,生成了一个完整的Driver对象,而loadClass只是执行了加载和链接的过程,并没有初始化,这种也有好处,在spring中加载配置文件,使用懒加载的方式可以大大提高类的加载速度。
如Class.forName("com.mysql.jdbc.Driver")
JVM内存模型
1.程序计数器
2.java虚拟机栈
包含了局部变量表,操作数栈,方法出口和动态链接
解释一下局部变量表,操作数栈(就是入栈,出栈,复制,运算等操作)
思考?
答:递归过深,栈帧数超出虚拟机栈深度
3.本地方法
4.元空间(MetaSpace)与永久代(PermGen)的区别?
(1)元空间和永久代都是方法区的实现
(2)jdk8以后移除了永久代,换成了元空间
(3)元空间使用的是本地内存,永久代使用的是jvm的内存
使用元空间的优势?
5.堆
常见面试题:
1.一般讲堆的初始值和堆的最大值设置为相等,避免垃圾回收之后重新分配内存。
2.Java内存模型中堆和栈的区别-内存分配策略
3.接下来举一个例子串联jvm
程序:
指向
4.不同JDK版本之间的intern()方法的区别(JDK6和JDK6+)
这篇博客写的很好,这里转载一下
https://www.jianshu.com/p/d5e...
JDK6的情况
false,false
JDK6+
false,true
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。