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

1.JVM的初步介绍(宋红康笔记)

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

1.JVM的初步介绍(宋红康笔记)

目录

1. JVM的初步介绍

1.1 JDK,JRE,JVM的关系

1.2 JVM的整体结构

1.3 Java代码执行流程

1.4 JVM的架构模型

1.5 JVM的生命周期

1. JVM的初步介绍

1.1 JDK,JRE,JVM的关系

JVM虚拟机是运行在操作系统之上的,它与硬件没有直接的交互,同时JDK>JRE>JVM JDK中包含有java Language前端编译器(例如:javac),可以将.java的文件编译成.class的字节码文件 JRE包含了JVM和一系列的Java SE的API,而JVM可以解释运行.class的字节码文件

1.2 JVM的整体结构

·HotSpot VM是目前市面上高性能虚拟机的代表着之一
·它采用解释器与即时编译器并存的架构
·在今天,Java程序的运行性能早已脱胎换骨,已经达到了可以和C/C++程序一较高下的地步

1.3 Java代码执行流程

java源码(xxx.java)通过java编译器(词法分析->语法分析->语义分析->字节码生成器)生成字节码文件(xxx.class) 然后将字节码文件传到Java虚拟机中(类加载器->字节码校验器->解释执行(翻译)和JIT编译器编译执行) 最后将编译执行的结果传到操作系统之中

 

1.4 JVM的架构模型

Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构 ·基于栈式架构的特点(HotSpot)
>设计和实现更简单,适用于资源受限的系统
>避开了寄存器的分配难题:使用零地址指令方式分配
>指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器更容易实现
>不需要硬件支持,可移植性更好,更好实现跨平台
·基于寄存器架构的特点
>典型的应用是x86的二进制指令集:比如传统的pc以及Android的Davlik虚拟机
>指令集架构则完全依赖硬件,可移植性差
>性能优秀和执行更高效 >花费更少的指令去完成一项操作
>在大部分情况下,基于寄存器的指令集往往都以一地址指令,二地址指令和三地址指令为主

·举例 (编写java代码 )

public class StackStruTest{
    public static void main(String[] args){
        int i = 2;
        int j = 3;
        int k = i+j;
    }
}

对上述代码进行编译后得到StackStruTest.class字节码文件,在终端反编译字节码文件,命令如下

cd + 字节码文件路径
javap -v StackStruTest

得到字节码指令(对应栈的架构)

Code:
	stack=2,locals=4,args_size=1
		0: iconst_2		//生成常量2
		1: istore_1		//将常量2保存在内存istore_1中
		2: iconst_3		//生成常量3
		3: istore_2		//将常量3保存在内存istore_2中
		4: iload_1		//加载内存istore_1
		5: iload_2		//加载内存istore_2
		6: iadd			//对内存1和内存2中的数据求和
		7: istore_3		//将求和结果存放在内存istore_3中
		8: return		//返回结果

寄存器的计算流程(对应寄存器的架构)

mov eax,2		//将eax寄存器的值设为2
add eax,3		//使eax寄存器的值加3

1.5 JVM的生命周期

·虚拟机的启动:
Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟 机的具体实现指定的
·虚拟机的执行:
>一个运行的Java虚拟机有着一个清晰的任务:执行Java程序
>程序开始执行时他才运行,程序结束时他就停止
>执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程
|·虚拟机的退出:
>程序正常执行结束
>程序执行过程中遇到了异常或错误而异常终止
>由于操作系统出现错误而导致Java虚拟机进程终止
>某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit和halt
>除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机退出

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

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

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