栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

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

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

目录
  • Java发展历史
  • JVM发展历史
  • 虚拟机
  • 机器码-中间码/字节码-指令-指令集-汇编-高级语言
    • 机器码/机器语言
    • 字节码
    • 指令
    • 指令集
    • 汇编语言
    • 高级语言
  • 指令集架构模型
  • JVM-JRE-JDK
  • JVM特点
  • JVM整体结构
  • Java代码执行流程
  • 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》
作者声明
  • 文章如有问题,欢迎指正!!!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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