Java 虚拟机面试题全面解析,《深入理解Java虚拟机》干货版,自己总结,希望能够帮助大家,免费下载~什么是类加载机制?
虚拟机和物理机的区别是什么?
运行时栈帧结构
Java方法调用
什么是方法调用?
Java的方法调用,有什么特殊之处?
Java虛拟机调用字节码指令有哪些?
虚拟机是如何执行方法里面的字节码指令的?
解释执行
基于栈的指令集和基于寄存器的指令集
什么是基于栈的指令集?
什么是基于寄存器的指令集?
基于栈的指令集的优缺点?
Javac编译过程分为哪些步骤?
什么是即时编译器?
解释器和编译器
为什么要采用分层编译?
分层编译器有哪些层次?
编译对象与触发条件
热点代码有哪些?
如何判断一段代码是不是热点代码?
Hotspot虚拟机使用第二种,有两个计数器:
方法调用计数器统计方法
有哪些经典的优化技术(即时编译器)?
公共子表达式消除
数组边界检查消除
方法内联
逃逸分析
如果对象不会逃逸到方法或线程外,可以做什么优化?
Java与C/C++的编译器对比
物理机如何处理并发问题?
Java内存模型
什么是Java内存模型?
Java内存模型的目标?
主内存与工作内存
内存间的交互操作
原子性、可见性、有序性
volatile
什么是 volatile?
为什么基于 volatile变量的运算在并发下不一定是安全的?
为什么使用 volatile?
并发与线程
并发与线程的关系?
什么是线程?
实现线程有哪些方式?
Java线程的实现
Java线程调度
什么是线程调度?
线程调度有哪些方法?
线程安全的定义?
Java语言操作的共享数据,包括哪些?
不可变
如何实现线程安全?
阻塞同步(互斥同步)
非阻塞同步
锁优化是在DK的那个版本?
为什么要提出自旋锁?
自旋锁的原理?
自旋的缺点?
什么是自适应自旋?
锁消除
锁粗化
轻量级锁
偏向锁
JDK是什么?
JDK是用于支持Java程序开发的最小环境。
1.Java程序设计语言
2.Java虚拟机
3. Java ap类库
JRE是什么?
JRE是支持Java程序运行的标准环境。
1. Java SE aPi子集
2.Java虚拟机
Java历史版本的特性?
Java∨ ersion se5.0
引入泛型;
增强循环,可以使用迭代方式;
自动装箱与自动拆箱;
类型安全的枚举
·可变参数;
静态引入
元数据(注解);
引入 Instrumentation
Java∨ ersion se6
支持脚本语言
引入JDBC40API;
引入 Java Compiler API;
可插拔注解;
增加对 Native PKi( Public Key Infrastructure)、 Java gss( Generic Security Service)
Kerberos和 LDAP(Lightweight Directory Access Protocol的支持;
继承 Web services
做了很多优化。
Java∨ ersion se7
switch语句块中允许以字符串作为分支条件;
在创建泛型对象时应用类型推断
·在一个语句块中捕获多种异常;
·支持动态语言;
支持try-with- resources
引入 Java nio.2开发包;
·数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线;
钻石型语法;
nu值的自动处理。
Java 8
函数式接口
Lambda表达式
接口的增强
运行时数据区域包括哪些?
1.程序计数器
2.Java虚拟机栈
3.本地方法栈
4.Java堆
5.方法区
6.运行时常量池
7.直接内存
程序计数器(线程私有)
程序计数器( Program Counter Register)是一块较小的内存空间,可以看作是当前线程所
执行字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这
个计数器完成。
由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式实现的。为了线
程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间的计
数器互不影响,独立存储。
1.如果线程正在执行的是一个Java方法,计数器记录的是正在执行的虚拟机字节码指令的地
址
2.如果正在执行的是 Native方法,这个计数器的值为空
程序计数器是唯一—个没有规定任何 OutofMemoryError的区域
Java虚拟机栈(线程私有)
Java虚拟机栈( Java virtual machine stacks)是线程私有的,生命周期与线程相同。
虛拟机栈描述的是Ja阳a方法执行的内存模型:每个方法被执行的时候都会创建一个栈
帧( Stack frame),存储
1.局部变量表
2.操作
1