IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> JVM内存与垃圾回收-1-JVM与Java初识 -> 正文阅读

[大数据]JVM内存与垃圾回收-1-JVM与Java初识

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》

作者声明

  • 文章如有问题,欢迎指正!!!
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:09:35  更:2021-10-03 17:10:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:12:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码