快捷搜索:  汽车  科技

面试必问的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字节的整数倍。如果不是整数倍,那就加点空数据来填充,就这个意思。

还有很多的题目,答案太多,篇幅有限,这里不一个个的发了。

觉得对你有帮助的话, 收藏 点赞 评论

有需要完整版的,私信我发送 ”面试“, 后台发给你

面试必问的jvm(别怂JVM面试26问-)(1)

随时刷题

面试必问的jvm(别怂JVM面试26问-)(2)

手机练习

面试必问的jvm(别怂JVM面试26问-)(3)

猜您喜欢: