面试必问的jvm(别怂JVM面试26问-)
面试必问的jvm(别怂JVM面试26问-)JRockitkilobyte 简单、轻量、高度可移植,在手机平台运行,运行速度慢。HotSpot VM热点代码技术,使用最多的虚拟机产品,并非由Sun公司开发。官方JDK均采用HotSpot VM。KVM
又是一年 金三银四面试季,希望你今年别怂,撸起袖子加油干你都知道哪些JVM产品Sun Classic VM
已经淘汰,是世界上第一款商用虚拟机,只能使用纯解释器(没有JITJust in time编译器)的方法来执行Java代码。
Exact VM
Exact Memory Management 准确式内存管理;编译器和解释器混合工作以及两级即时编译器。
HotSpot VM
热点代码技术,使用最多的虚拟机产品,并非由Sun公司开发。官方JDK均采用HotSpot VM。
KVM
kilobyte 简单、轻量、高度可移植,在手机平台运行,运行速度慢。
JRockit
BEA公司开发,是世界上最快的Java虚拟机,专注于服务端应用,全部靠编译器执行。
J9
IBM开发 原名:IBM Techn0ology for Java Virtual Machine IT4j
Davik
不是java虚拟机,寄存器架构而不是栈结构,执行dex(dalvik Executable)文件。
Microsoft JVM
只能运行在windows下面。
Azul VM Liquid VM
高性能的java虚拟机,在HotSpot基础上改进,专用的虚拟机。
Taobao VM
淘宝公司开发
JVM运行时数据区运行时数据区指的是,JVM运行过程中,对其申请到的内存,划分的不同区域。
区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而 存在,有些区域则依赖用户线程的启动和结束而建立和销毁。
JVM规范中定义:程序计数器、虚拟机栈、本地方法栈、Java堆、方法区
Oracle官网资料: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5
程序计数器用来干啥程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器
JVM根据这个觉得它需要执行的具体指令。
注意:这玩意里边,每个线程都有分配一块私有的区域
你可以宏观的理解为,这地方指向具体要执行的指令所在的位置
Java虚拟机栈用来干什么线程私有的 - 保存线程在它执行过程中,所产生的数据。
方法执行的时候,会产生:变量、返回值、方法传递、临时数据。这些东西都方法一起。
称为栈帧(Stack Frame)- 存储局部变量表、操作数栈、动态链接、方法出口 等信息。
那么多个方法执行怎么存?
多个方法对应多个栈帧,这个栈帧你可以理解为一个对象, 这些对象采用 栈 数据结构进行存取。
执行方法的时候,创建一个栈帧保存起来,执行完毕就干掉
每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
说说局部变量表方法的执行,所需要的变量。
局部变量就是说 这个变量 只能这某一个方法中使用。其他地方用不了。
局部变量表存放了编译期可知的各种基本数据类型、对象引用(指向对 象起始地址或其他与此对象相关的位置)、字节码指令的地址。
本地方法栈本地方法栈(Native Method Stack)与虚拟机栈相似,区别是虚拟机栈对应JVM执行Java方法的记录,本地方法栈则为JVM使用到的Native方法服务
jvm堆放什么东西一般是JVM管理内存中最大的一块
几乎所有的对象实例都在这里分配内存
注意 虚拟机规范定义的是: 所有的对象实例以及数组都要在堆上分配。 但是具体的JVM产品会进行优化
比如:Oracle的Hotspot 就有一项称之为”栈上分配“的优化,将对象数据直接存到 虚拟机栈上面了
说说方法区都有啥存储已被虚 拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
这玩意,hotspot 1.8以前 叫做 永久代, 1.8开始叫做元数据空间
什么数据会存到运行时常量池?首先 它是方法区的一部分
方法本身有一块信息就是常量池,存放编译期生成的各种字面量和符号引用。
比如 int test = 0 ; 你的test变量名称,就可以理解为一个常量
String a = "123"; 这种数据,编译的时候就能确定下来了
运行时常量池,顾名思义,就是运行时,动态的。
比如: 是String类的intern()方法
你知道一个对象在存储中怎么存放嘛?hotspot中 ,一个对象存放分为3个区域:
- 对象头(Header)类元数据的指针、哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时 间戳等
- 实例数据(Instance Data)这地方就存放属性的具体值,比如int ,就是4字节的位置
- 对齐填充(Padding)没啥特别含义,HotSpot设计的时候,就规定对象的大小必须是8字节的整数倍。如果不是整数倍,那就加点空数据来填充,就这个意思。
还有很多的题目,答案太多,篇幅有限,这里不一个个的发了。
觉得对你有帮助的话, 收藏 点赞 评论
有需要完整版的,私信我发送 ”面试“, 后台发给你
随时刷题
手机练习