ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

JVM内存与垃圾回收-1-JVM与Java初识

2021-10-02 19:00:18  阅读:135  来源: 互联网

标签:Java 指令集 虚拟机 VM 初识 指令 JVM


目录

Java发展历史

  • 到现在为止,javaSE8(1.8.0)仍然是企业中使用的最多的版本
    在这里插入图片描述

JVM发展历史

  • 解释器:提高响应时间,提交代码马上可以执行,执行的慢
  • 编译器:提高执行性能,提交代码需要先编译完成,执行的快
  1. Sun Classic VM
  • 只有解释器
  1. Exact VM
  • Exact Memory Management:虚拟机知道位于内存中的数据的具体类型
  • 编译器和解释器协同工作
  • 热点探测
  1. Sun HotSpot VM
  • 使用最多的虚拟机
  • 编译器(JIT)和解释器协同工作
  • JIT(Just In Time)即时编译器会将编译后的热点代码缓存起来
  • 热点探测(热点代码为经常被执行的代码)
  • 独有方法区,JRockit和J9 VM都没有方法区
  • Sun公司被Oracle收购
  1. BEA JRockit VM
  • 专注服务器应用
  • 没有解释器
  • 全面的JVM解决方案(提供JRockit Real Time解决方案-微秒响应时间;提供Mission Control服务套件-极低开销监控、管理和分析JVM的工具)
  • BEA公司被Oracle收购
  1. IBM J9 VM
  • 定位类似HotSpot
  • 适合在IBM自家产品上使用
  1. KVM和CDC/CLDC HotSpot VM
  • CDC/CLDC HotSpot VM是Java ME产品线上的两款VM
  • KVM是CLDC-HI的早期产品
  • KVM面向低端功能机市场
  • KVM简单、轻量、高度可移植
  1. Azul VM
  • 软硬件耦合
  • 超快:Azul VM与Vega系统结合性能>HotSpot
  1. Azul Zing VM
  • 快:Zing VM 在x86平台性能>HotSpot
  1. BEA Liquid VM
  • 也叫JRockit VE(Virtual Edition)
  • 软硬件耦合
  • 不需要运行于操作系统之上,自己实现了专用操作系统
  • 项目已经终止
  1. Apache Harmony
  • 未大规模商用
  • Java类库代码吸纳进了Android SDK
  1. Microsoft VM
  • 因商业纠纷停用
  1. TaobaoJVM
  • GCIH(GC invisible heap,GC不可见的堆):
    • GC管理:生命周期长的对象移动到heap外,GC不能管理GCIH内部的Java对象-生命周期长的对象直接不让GC管理了。
    • 对象共享:GCIH中的对象可以跨JVM进程共享。
  • JNI(Java native interface):
    • 降低JNI调用开销
    • 使用crc32指令实现JVM intrinsic降低了JNI调用开销
  • 诊断监测:
    • PMU hardware的Java profiling tool
  • ZenGC:
    • 大数据场景
  • 软硬件耦合
    • CPU全都是清一色的Intel CPU,且编译手段采用的是Intel C/CPP Compiler进行编译
  1. Dalvik VM
  • 应用于Android系统
  • 不能称作Java虚拟机,因为它没有遵循Java虚拟机规范并且指令集架构也不同
  • 不能直接运行.class文件,执行.dex文件
  • 基于寄存器架构,不是JVM的栈式架构
  • .dex是编译完成的文件,因此执行效率高
  • .dev文件可以通过.class文件转化而来
  1. ART VM
  • Android 5.0替换Dalvik VM
  • 支持提前编译AOT(Ahead of Time Compilation)
  • 应用于Android系统
  • 不能称作Java虚拟机,因为它没有遵循Java虚拟机规范并且指令集架构也不同
  1. Graal VM
  • Graal VM是跨语言全栈虚拟机
    • 口号:“run programs faster anywhere”
    • 支持各种语言,包括 Java、Scala、C、C++、JavaScript、Ruby、Python等
    • 直接跨语言接口调用和对象使用,比如,Java可以使用Python接口和对象
  • JVM是跨语言的平台
    • 口号:“write once, run anywhere”
  • 输入规范
    • Graal VM的输入也有规范,由Truffle工具集构建的某语言解释器满足
    • 传统JVM的输入必须是符合JVM规范的.class文件
  • 工作原理
    • 将某种语言的源代码或中间代码(源代码编译后的结果)通过解释器转化为中间表示(能被Graal VM接受的中间表示)
    • 提供Truffle工具集可以快速构建新语言的解释器(某语言源代码或中间代码-解释-》Graal VM输入)
    • 提供即时编译优化,获得比某语言原生编译器更优秀的执行效率

虚拟机

在这里插入图片描述

  • 虚拟机 分为系统虚拟机和程序虚拟机
  • 系统虚拟机:是对物理计算机的仿真;visual box和VMware就属于系统虚拟机
  • 程序虚拟机:专门为执行单个计算机程序而设计;JVM就属于程序虚拟机

机器码-中间码/字节码-指令-指令集-汇编-高级语言

机器码/机器语言

  • 机器码是二进制编码,是01序列 表示的指令
  • 机器码能够被计算机直接理解,与人类语言相差巨大
  • 机器码与硬件平台(CPU)高度耦合
  • 不同硬件平台(CPU)具有不同机器码

字节码

  • .class文件,中间码
  • 中间状态的二进制代码,从机器码向上抽象成中间码/字节码
  • 为了实现跨平台,与特点硬件平台解耦
  • .java文件-编译-》.class文件-JVM-》机器码

指令

  • 由于机器码的可读性太差而出现了指令
  • 把特定功能 机器码/特定01序列 固定为指令。例如,mov, inc等
  • 不同硬件平台(CPU)具有不同机器码》不同硬件平台(CPU)具有不同指令

指令集

  • 指令构成的集合
  • 不同硬件平台(CPU)具有不同机器码》不同硬件平台(CPU)具有不同指令》不同硬件平台(CPU)具有不同指令集
  • 常见:x86指令集 对应 x86架构的平台;ARM指令集 对应 ARM架构的平台

汇编语言

  • 由于指令的可读性太差出现了汇编语言
  • 操作码助记符:助记符代替指令的操作码
  • 操作数助记符:地址符号或标号代替指令或操作数的地址
  • 不同硬件平台(CPU)具有不同机器码》不同硬件平台(CPU)具有不同指令》不同硬件平台(CPU)具有不同指令集》不同硬件平台(CPU)可能具有不同汇编语言(同一厂商的硬件平台一般具有同一汇编语言)
  • 汇编语言-汇编过程-》特定硬件平台指令集

高级语言

  • 由于汇编的可读性太差出现了高级语言
  • 高级语言》解释/编译》汇编语言》机器指令

指令集架构模型

指令集架构模型典型应用特点n地址指令对齐方式
基于寄存器的指令集架构x86指令集依赖于寄存器,可移植性差,性能优秀执行高效一般,都是一地址指令,二地址指令,三地址指令为主16位对齐
基于栈的指令集架构JVM栈结构实现简单不需要特定硬件支持,可移植性好,适用于资源受限的系统(开始Java程序就是为了运行在机顶盒上)。使用零地址指令分配方式(栈顶),避开了寄存器的分配难题。8位对齐

对比

  • 单个指令大小:基于栈的指令集模型<基于寄存器指令集模型
  • 同样操作所需指令数量:基于栈的指令集模型>基于寄存器指令集模型

JVM-JRE-JDK

在这里插入图片描述

JVM特点

  • JVM是跨语言的平台
  • 口号:“write once, run anywhere”
  • 自动内存管理
  • 自动垃圾回收

JVM整体结构

在这里插入图片描述

Java代码执行流程

简介
在这里插入图片描述
详解
在这里插入图片描述

  • 编程器一般分为前端,中端,后端
  • javac是前端编译器
  • JIT(即时编译器)是后端编译器

JVM生命周期

生命周期:

  • 引导类加载器(bootstrap class loader)》创建初始类对象(initial class)》启动JVM》执行java程序》执行Java程序完毕,停止JVM
  • Java程序由JVM进程负责执行
    虚拟机退出方式
  • 自动正常退出:Java程序执行完毕正常退出
  • 自动异常终止:Java程序执行过程中遇到内部外部异常或错误(Java程序异常,操作系统异常)
  • 主动退出:调用exit()方法,halt()方法

参考书目

  • 参考Oracle公司发布的《The Java Virtual Machine Specification》

作者声明

  • 文章如有问题,欢迎指正!!!

标签:Java,指令集,虚拟机,VM,初识,指令,JVM
来源: https://blog.csdn.net/baidu_35805755/article/details/120571553

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有