20201202jvm学习第1课

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的一种实现

  1. 命令行中 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中的执行过程?
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值