JVM01 JVM与Java体系结构

学习尚硅谷以及深入理解Java虚拟机后,记下如下笔记,方便后续查看;

01 JVM与Java体系结构

一、Java程序的运行

1. 常见的Java项目运行的结构体系

JVM是Java程序运行的基石;
Java程序运行架构

2. 计算机运行程序的流程

高级语言运行流程

任何高级语言必须编译汇编成机器指令才能被计算机的CPU所执行;

3. Java VS C++ 内存分配

Java VS C++ 垃圾回收

区别:

  • Java自动垃圾回收;
  • C++需要收到进行垃圾回收;

二、 Java及JVM简介

1. Java:跨平台的语言

Java编译一次可以在任何平台进行运行,例如window、linux等,不瘦平台的限制,如口号“write once, run anywhere”
JVM跨平台特性

2. JVM:跨语言的平台

JVM虚拟机不仅可以运行Java语言,可以运行任何符合JVM规范的语言;
JVM跨语言特性

解析

  • Java虚拟机平台可与运行非Java语言编写的程序
  • Java虚拟机只关心字节码文件,只要其它编程语言的编译结果满足Java虚拟机的内部指令集、符号表以及其它辅助信息即可;
  • Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式Class文件格式关联

三、 虚拟机与Java虚拟机

1. 虚拟机

虚拟机是一台虚拟的计算机,是一款软件,可分为两大类

  • 系统虚拟机:例如Visual Box、VMware属于系统虚拟机,完全对物理计算机的仿真;
  • 程序虚拟机:Java虚拟机,专门为执行单个计算机程序而设计;

虚拟机上运行的程序均受限于虚拟机提供的资源;

2. Java虚拟机

Java虚拟机是一台执行Java字节码(可以由多种语言编译来,并非限制一定是Java语言)的虚拟计算机;

作用:

  • Java虚拟机是二进制字节码的运行环境,负责加载字节码到其内部,并翻译成机器指令执行;

特点:

  • 一次编译,到处运行
  • 自动内存管理
  • 自动垃圾回收
3. JVM在计算机中的位置

JVM在计算机位置的简图
JVM在Java体系中的位置

四、 JVM的整体结构

JVM的整体结构

五、 Java代码执行流程

Java程序的执行流程

六、JVM的架构模型

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

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

【例子:执行2+3两种指令集】

基于栈式架构

iconst_2
istore_1
iconst_3
istore_2
iload_1
iload_2
iadd
istore_0

基于寄存器架构

mov eax,2 //将eax寄存器的值设为1
add eax,3 //将eax寄存器的值加3
  • 处于跨平台性设计,JVM选择基于栈式的的指令集;
  • 优点:跨平台性好、指令集小;
  • 缺点:执行性能下降;

七、 JVM的生命周期

1. 虚拟机的启动

Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成,这个类是由虚拟机的具体实现指定的;

2. 虚拟机的执行
  • 一个运行的虚拟机有着一个清晰的任务:执行Java程序;
  • 程序开始执行时虚拟机开始执行,程序结构即停止;
  • 执行一个所有的Java程序的时候,真真正正正在执行的是一个叫做Java虚拟机的进程;
3. 虚拟机的退出

如下情况虚拟机会退出:

  • 程序正常执行结束;
  • 程序在执行过程中遇到了异常或错误而终止运行;
  • 由于操作系统出现错误导致Java虚拟机进程停止;
  • 某线程调用Runtime类或System的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作;
  • JNI(Java Naive Interface)规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值