栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM学习笔记(一:JVM概述)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM学习笔记(一:JVM概述)

JVM学习笔记:一:JVM概述

JVM概述

JVM的作用JVM 特点JVM的位置JVM的组成Java代码的执行流程JVM 架构模型

虚拟机:Virtual Machine ,是一款软件,用来执行一系列计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。
VMware属于系统虚拟机,是对物理计算机的仿真,提供了一个可运行完整操作系统的平台。
JVM 属于程序虚拟机,它专门为执行某个计算机程序而设计。

JVM概述

JVM(Java Virtual Machine)Java虚拟机

在JVM中执行的指令称为Java字节码指令JVM是一种执行Java字节码文件的虚拟计算机,它拥有独立的运行机制Java核心技术就是JVM,所有的Java程序都运行在JVM内部。 JVM的作用

JVM 特点

一次编译,到处运行(跨平台,只要安装了jre,就可以运行Java程序)自动内存管理自动垃圾回收功能

现在的JVM不仅可以执行Java字节码文件,还可以执行其他语言编译后的字节码文件,是一个跨语言的平台。

JVM的位置

JVM是运行在操作系统之上的,它与硬件没有直接的交互。

JDK:开发人员使用的工具包

javac :用于编译Java源文件java:用于运行Java程序,它会启动Java虚拟机,Java虚拟机加载相关的类,然后调用主程序main()方法jar:将Java程序打包成一个.jar文件, JRE:运行Java程序所需要的环境JVM:将字节码解释编译为平台上的机器码指令 JVM的组成

    类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Native Interface)

简图:

详细图:

组成部分的用途
程序在执行之前要先把Java代码转换成字节码文件(.class文件),JVM首先需要把字节码通过一定的方式 类加载器(ClassLoader)把文件加载到内存中的运行时数据区(Runtime Data Area),而字节码文件是JVM的一套指令集规范,并不能直接交给底层的操作系统去执行,需要特定的命令解析器 执行引擎(Execution Engine) 将字节码翻译成底层系统指令再交由CPU去执行,这个过程需要调用其他语言的接口 本地库接口(Native Interface)来实现整个程序的功能。

通常所说的JVM组成指 运行时数据区 ,通常调试分析的区域就是 运行时数据区,或者说是运行时数据区 中的Heap (堆)。

Java代码的执行流程



Java编译器编译过程中,任何一个节点执行失败就会造成编译失败,虽然各个平台的Java虚拟机内部实现细节不尽相同,但是他们执行的字节码内容是一样的。

JVM主要任务就是负责将字节码装在到内部,解释 / 编译为对应平台上机器指令执行。JVM使用类加载器(Class Loader)装载class文件。

类加载完成后,会进行字节码校验,字节码校验通过之后,JVM解释器会把字节码翻译成机器码交由操作系统执行。但不是所有的代码都是解释执行,JVM对此作了优化,比如HotSpot虚拟机本身提供了JIT(Just In Time)编译器。

JVM 架构模型

Java编译器输入的指令流基本上是一种基于栈的指令集架构
另一种指令集架构是基于寄存器的指令集架构。

两种架构之间的区别:

基于栈式架构的特点:

设计和实现更简单,适用于资源受限的系统使用零地址指令方式分配,其执行过程依赖于操作栈,指令集更小,编译器容易实现。不需要硬件支持,可移植型好,更好实现跨平台

基于寄存器式架构特点:

指令完全依赖于硬件,可移植性差性能优秀,执行更高效完成一项操作使用的指令更少

执行 2+3 逻辑操作,指令如下:

    基于栈的计算流程(JVM为例)
iconst_2   //常量2入栈
istore_1   
iconst_3   //常量3入栈
istore_2
iload_1    
iload_2
iadd       //常量2 3 出栈,执行相加
istore_0   //结果  5  出栈
    基于寄存器的计算流程
mov eax,2  //将eax寄存器的值设为1
add eax,3  //将eax寄存器的值加3

使用javap -v class 可以将class文件反编译为指令集

所以由于跨平台的设计,Java指令集都是根据栈来设计的,不同CPU架构不同,因此不能设计为基于寄存器的。

优点是跨平台,指令集小,编译器容易实现缺点是性能下降,实现同样功能需要更多的指令

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750026.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号