1.为什么 Java 研发系统需要 JVM?
java代码是高级预计,不能直接和操作系统交互,需要中间平台。
JVM 解释的是类似于汇编语言的字节码,需要一个抽象的运行时环境。同时,这个虚拟环境也需要解决字节码加载、自动垃圾回收、并发等一系列问题。JVM 其实是一个规范,定义了 .class 文件的结构、加载机制、数据存储、运行时栈等诸多内容,最常用的 JVM 实现就是 Hotspot。
2.对你 JVM 的运行原理了解多少?
Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,
最终调用操作系统上的函数,完成我们想要的操作。
3.我们写的 Java 代码到底是如何运行起来的?
一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到元数据
区,执行引擎将会通过混合模式
执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的黑盒存在,输入字节码,调用操作系统函数。
过程如下:java代码 —》用编译器(eclipse/idea)编译成.class文件或者jar文件–>通过jvm解析—》调用操作系统函数(包括linux,windows,MacOs等系统)
JVM 认为是一个翻译器,会持续不断的翻译执行 Java 字节码,然后调用真正的操作系统函数,这些操作系统函数是与平台息息相关的。
4.jdk,jre和jvm的关系?
总体关系 jdk> jre>jvm.
仅仅是 JVM,是无法完成一次编译,处处运行的。它需要一个基本的类库,比如怎么操作文件、怎么连接网络等。
JVM 标准+一大堆基础类库,就组成了 Java 的运行时环境,也就是我们常说的 JRE(Java Runtime Environment)。
JRE + 一些开发工具(比如 javac、java、jar等)=JDK. JDK是 Java 开发的核心
jvm是一种规范,hotspot是jvm的一种实现
- 命令行中 javac、java、javap 的使用详解
javac XXXX.java 编译java代码(HelloWorld.java,则执行javac HelloWorld.java)
java 字节码文件 得到执行java代码的结果(如HelloWorld.class,则执行java HelloWorld)
javap 主要用于帮助开发者深入了解 Java 编译器的机制
javap HelloWorld 只显示编译结果的概要信息
javap -c HelloWorld (c含义:分解方法代码,即显示每个方法具体的字节码)
6.jvm是怎么解释字节码的?
JVM 会翻译这些字节码,它有两种执行方式。常见的就是解释执行,将 opcode + 操作数翻译成机器代码;另外一种执行方式就是 JIT,也就是我们常说的即时编译,它会在一定条件下将字节码编译成机器码之后再执行。
这些 .class 文件会被加载、存放到 metaspace 中,等待被调用,这里会有一个类加载器的概念。
7.jvm中堆栈是怎么运行的?
堆是存放对象的。栈用于管理对象。
而 JVM 的程序运行,都是在栈上完成的,这和其他普通程序的执行是类似的,同样分为堆和栈。比如我们现在运行到了 main 方法,就会给它分配一个栈帧。当退出方法体时,会弹出相应的栈帧。大多数字节码指令,就是不断的对栈帧进行操作(将 opcode + 操作数翻译成机器代码)。
而其他大块数据,是存放在堆上的。
8.图片描述类在jvm中的执行过程?