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

什么是java虚拟机(Java Virtual Machine)?马上就要找实习了,趁着现在有时间,做个小小的面试总结,部分原创,大部分是在网上搜集。1什么是java虚拟机(JavaVirtualMachine)?java虚拟机是一种抽象化虚拟的计算机,java虚拟机有完善的一套硬体架构,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。java虚拟机屏蔽了当前使用的操作系统平台的相关信息,使得java程序只需生成相关的java字节…

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

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

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栈的局部变量,可能为常量池的引用。如果是常量池的引用,并且还未解析,则需要进行解析。任何时候,栈中都是基本变量或者对象引用,按部就班执行就行了。

什么是java虚拟机(Java Virtual Machine)? ps:此图为转载





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • UltraISO激活成功教程_ultraiso是什么软件

    UltraISO激活成功教程_ultraiso是什么软件下载链接:https://cn.ultraiso.net/uiso9_cn.exe简体中文版专用:注册名:Guanjiu注册码:A06C-83A7-701D-6CFC多国语言版专用:注册名:Home注册码:4BA9-0D54-214A-C938…

    2022年10月12日
  • RabbitMQ Network Partitions 处理策略[通俗易懂]

    RabbitMQ Network Partitions 处理策略[通俗易懂]网络分区的意义RabbitMQ的模型类似交换机模型,且采用erlang这种电信网络方面的专用语言实现。RabbitMQ集群是不能跨LAN部署(如果要WAN部署需要采用专门的插件)的,也就是基于网络情况良好的前提下运行的。这种假设就好比paxos并不解决拜占庭问题。为什么RabbitMQ需要这种前提假设?这个它本身的数据一致性复制原理有关。RabbitMQ采用的镜像队列是一种环形的逻辑结构,…

  • 语义分割总结_细粒度语义分割

    语义分割总结_细粒度语义分割图像分割算法总结1.评价指标:普通指标:PixelAccuracy(PA,像素精度):标记正确的像素点占所有像素点的比例。混淆矩阵中=\(\frac{{\rm{对角线}}}{总和}\)Mea

  • YYModel高性能 iOS数据模型转换

    YYModel高性能 iOS数据模型转换处理GithubUser数据10000次耗时统计(iPhone6):特性:高性能:模型转换性能接近手写解析代码。自动类型转换:对象类型可以自动转换,详情见下方表格。类型安全:转换过程中,所有的数据类型都会被检测一遍,以保证类型安全,避免崩溃问题。无侵入性:模型无需继承自其他基类。轻量:该框架只有5个文件(包括.h文件)。文档和单元测试:文档覆盖…

    2022年10月29日
  • Java单例模式8种方式 详解

    Java单例模式8种方式 详解Singleton所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该由人来控制,而应该由代码来限制,强制单例。运用场景很多,例如网站的在线人数,window系统的任务管理器,网站计数器等等,这些都是单例模式的运用。单例模式有常见的8种形式,如下:1.Lazy1【不可用】懒汉式1:线程不稳定延迟初始化多线程不安全是最基本的实现方式,不支持多线程,因为没有synchronized加锁,多线程不能工作。实现图多线程则会出现,当Singleton_La

  • XSS危害——session劫持

    XSS危害——session劫持

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号