首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >什么是java虚拟机(Java Virtual Machine)?

什么是java虚拟机(Java Virtual Machine)?

作者头像
全栈程序员站长
发布于 2022-09-08 04:22:10
发布于 2022-09-08 04:22:10
2.1K0
举报

大家好,又见面了,我是你们的朋友全栈君。

马上就要找实习了,趁着现在有时间,做个小小的面试总结,部分原创,大部分是在网上搜集。

1 什么是java虚拟机(Java Virtual Machine)?

java虚拟机是一种抽象化虚拟的计算机,java虚拟机有完善的一套硬体架构,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。java虚拟机屏蔽了当前使用的操作系统平台的相关信息,使得java程序只需生成相关的java字节码文件(class文件)便可在多平台运行。

java的一个非常重要的特性就是与平台的无关性。

一般的高级语言如C语言,如果要运行程序,需要经过编译成不同的目标代码。而java虚拟机在不同的平台上不需要编译即可运行程序。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

Java虚拟机支持Java语言的基本数据类型有8种,注意String(引用类型)不是基本数据类型如下:

byte、short、int、long、float、double、char、boolean。

虚拟机支持的其它数据类型包括:

object//对一个Javaobject(对象)的4字节引用

returnAddress//4字节,用于jsr/ret/jsr-w/ret-w指令

注:Java数组被当作object处理。

指令系统

Java指令也是由操作码和操作数两部分组成。操作码为8位二进制数,操作数进紧随在操作码的后面,其长度根据需要而不同。操作码用于指定一条指令操作的性质(在这里我们采用汇编符号的形式进行说明),如iload表示从存储器中装入一个整数。Java的8位操作码的长度使得JVM最多有256种指令,java1.6及以上版本已使用了160多种操作码。

寄存器

JVM只设置了4个最为常用的寄存器。它们是:pc程序计数器optop操作数栈顶指针frame当前执行环境指针 vars指向当前执行环境中第一个局部变量的指针 所有寄存器均为32位。pc用于记录程序的执行。optop,frame和vars用于记录指向Java栈区的指针。

栈结构

作为基于栈结构的计算机,Java栈是JVM存储信息的主要方法。当JVM得到一个Java字节码应用程序后,便为该代码中一个类的每一个方法创建一个栈框架,以保存该方法的状态信息。每个栈框架包括以下三类信息:局部变量,执行环境,操作数栈。

碎片回收堆(垃圾回收站)

在Java语言中,除了new语句外没有其他方法为一对象申请和释放内存。对内存进行释放和回收的工作是由Java运行系统承担的。碎片回收用后台线程的方式来执行。这不但为运行系统提供了良好的性能,而且使程序设计人员摆脱了自己控制内存使用的风险。

存储区

JVM有两类存储区: 常量缓冲池和方法区。常量缓冲池用于存储类名称、方法和字段名称以及字符串常量。方法区则用于存储Java方法的 字节码。JVM 虚拟机相当于80×86计算机系统,Java 解释器相当于80x86CPU。在80x86CPU上运行的是机器码,在Java解释器上运行的是Java字节码。Java解释器相当于运行Java 字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。Java解释器实际上就是特定的平台下的一个应用程序。只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运行,这是Java跨平台的根本。当前,并不是在所有的平台下都有相应Java解释器程序,这也是Java并不能在所有的平台下都能运行的原因,它只能在已实现了Java解释器程序的平台下运行。

java虚拟机运行过程

public class Test {

public static void main(String[] args){

System.out.println(“Hello World!”);

}

}

输出:

Hello World!

步骤:1:编写java程序,生成.java文件 2:编译java文件生成字节码文件(class文件) 3:装载、连接、初始化数据 4:类实例生成,垃圾回收。

从虚拟机的角度,最开始是面对的class文件,读入并解析class文件,将PC寄存器设置为main入口,然后开始执行字节码。字节码总是针对运算栈的,所以虚拟机知道操作数就在运算栈那里。字节码由操作符和操作数定义,操作数可能为Java栈的局部变量,可能为常量池的引用。如果是常量池的引用,并且还未解析,则需要进行解析。任何时候,栈中都是基本变量或者对象引用,按部就班执行就行了。

ps:此图为转载

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156817.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JVM、Java编译器和Java解释器
java解释器就是把在java虚拟机上运行的目标代码(字节码)解释成为具体平台的机器码的程序。即jdk或jre目录下bin目录中的java.exe文件,而javac.exe是编译器。
一个会写诗的程序员
2018/08/17
6.6K0
理解Java虚拟机体系结构
  众所周知,Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么。正是得益于Java虚拟机,它号称的“一次编译,到处运行”才能有所保障。
Java团长
2018/07/23
4250
理解Java虚拟机体系结构
JAVA虚拟机与Android虚拟机的区别
1.JAVA虚拟机运行的是JAVA字节码,Dalvik虚拟机运行的是Dalvik字节码 java虚拟机:JAVA->class文件 dalvik虚拟机:JAVA->class文件->Dalvik字节码->打包到dex中->DVM通过解释DEX文件来执行这些字节码。
老马的编程之旅
2022/06/22
1.2K0
JAVA虚拟机与Android虚拟机的区别
JVM规范系列第2章:Java虚拟机结构
简单地说,就是《JVM规范》中提到的内容,你一定要遵守。但没有提到的内容,你就自由发挥。所以我们要知道,我们经常听到的老年代、年轻代、永久代,其实只是HotSpot虚拟机的实现而已。因为《JVM规范》中并没有规定这些东西。
陈树义
2019/02/13
6320
JVM虚拟机详解
  JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
技术zhai
2018/08/20
7350
JVM虚拟机详解
粗谈Java虚拟机之内存管理
线程私有,生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。如果请求的站深度大于虚拟机所允许的深度,将抛出StackOverflowError异常,虚拟机栈在动态扩展时如果无法申请到足够的内存,就会抛出OutOfMemoryError异常。 总结:它存放的是java方法执行时的所有数据。 由栈帧组成一个栈帧代表一个方法的执行。
g小志
2018/09/11
5340
粗谈Java虚拟机之内存管理
Java虚拟机JVM详解
JVM是Java虚拟机的缩写,本质上是一个程序,能识别.class字节码文件(.java文件编译后产生的二进制代码),并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。
派大星在吗
2021/12/17
5150
【深入Java虚拟机】之一:Java内存区域与内存溢出
内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本
Java高级架构
2018/04/19
7570
【深入Java虚拟机】之一:Java内存区域与内存溢出
Java虚拟机
1、Java虚拟机是什么 “Java虚拟机“可以指三种不同的东西 抽象规范 一个具体的实现 一个运行中的虚拟机实例 当运行一个Java程序的同时,也就是在运行一个Java虚拟机实例 2、Java虚拟机
java达人
2018/01/31
1.3K0
Java虚拟机
java(5)-深入理解虚拟机JVM
在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode)(class文件的内容),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。
黄规速
2022/04/14
9780
java(5)-深入理解虚拟机JVM
JVM内幕:Java虚拟机详解
这篇文章解释了Java 虚拟机(JVM)的内部架构。下图显示了遵守 Java SE 7 规范的典型的 JVM 核心内部组件。
Java团长
2018/08/06
8550
Java虚拟机基础——2JVM运行时数据区
本篇文章主要讲解JVM运行时数据区,所以我们按照线程是否私有的维度将本篇文章一分为二,分为线程私有数据区和所有线程共有的数据区。而在线程私有的数据区又可以分为程序计数器、虚拟机栈、本地方法栈;所有线程共有的数据区又可以分为Java堆、方法区。 思维导图如下:
隔壁老李头
2018/10/10
5540
java虚拟机构造原理
 Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序,就会有三个运行中的Java虚拟机。 Java虚拟机总是开始于一个main()方法,这个方法必须是公有、返回void、直接受一个字符串数组。在程序执行时,你必须给Java虚拟机指明这个包换main()方法的类名。 Main()方法是程序的起点,他被执行的线程初始化为程序的初始线程。程序中其他的线程都由他来启动。Java中的线程分为两种:守护线程
xiangzhihong
2018/01/30
6450
java虚拟机构造原理
详细介绍Java虚拟机(JVM)
  一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序,就会有三个运行中的Java虚拟机。 Java虚拟机总是开始于一个main()方法,这个方法必须是公有、返回void、直接受一个字符串数组。在程序执行时,你必须给Java虚拟机指明这个包换main()方法的类名。main()方法是程序的起点,他被执行的线程初始化为程序的初始线程。程序中其他的线程都由他来启动。
用户1205080
2018/09/12
5470
详细介绍Java虚拟机(JVM)
Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区
之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么。虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事儿,更重要的是不成体系的内容对读者也不够友好。所以以后的博客尽量按系列来写,不过偶尔也会穿插其他的内容。接下来一段时间我会把写博客的重点放在 JVM (Java Virtual Machine) 和 JUC (java util concurrent ) 上,对 Java 虚拟机和 Java 并发编程进行一系列的介绍,欢迎关注。
架构之家
2022/07/12
6220
Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区
Java虚拟机工作原理详解
http://blog.csdn.net/bingduanlbd/article/details/8363734
bear_fish
2018/09/20
5190
Java虚拟机工作原理详解
JVM之虚拟机栈
由于跨平台性的设计,java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。
程序员阿杜
2021/06/29
6120
[二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义
JVM全称是Java Virtual Machine  ,既然是虚拟机,他终归要运行在物理机上
noteless
2018/09/11
9970
[二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义
JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比
JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才能够运行Java程序,JAVA在编译后会生成类似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是,C编译成的汇编语言会直接在硬件上跑,但JAVA编译后生成的字节码是在JVM上跑,需要由JVM把字节码翻译成机器指令,才能使JAVA程序跑起来。
全栈程序员站长
2022/07/20
1.6K0
JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比
Java虚拟机简介
● JVM 是 Java Virtual Machine(Java虚拟机)的缩写,是 JRE 的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java 虚拟机 JVM 是属于 JRE 的,而现在我们安装 JDK 时也附带安装了 JRE (当然也可以单独安装JRE)。
全栈程序员站长
2022/09/08
4910
推荐阅读
相关推荐
JVM、Java编译器和Java解释器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档