Java教程
JVM内存与垃圾回收-1-JVM与Java初识
本文主要是介绍JVM内存与垃圾回收-1-JVM与Java初识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
Java发展历史
JVM发展历史
虚拟机
机器码-中间码/字节码-指令-指令集-汇编-高级语言
机器码/机器语言
字节码
指令
指令集
汇编语言
高级语言
指令集架构模型
JVM-JRE-JDK
JVM特点
JVM整体结构
Java代码执行流程
JVM生命周期
参考书目
作者声明
Java发展历史
到现在为止,javaSE8(1.8.0)仍然是企业中使用的最多的版本
JVM发展历史
解释器:提高响应时间,提交代码马上可以执行,执行的慢
编译器:提高执行性能,提交代码需要先编译完成,执行的快
Sun Classic VM
只有解释器
Exact VM
Exact Memory Management:虚拟机知道位于内存中的数据的具体类型
编译器和解释器协同工作
热点探测
Sun HotSpot VM
使用最多的虚拟机
编译器(JIT)和解释器协同工作
JIT(Just In Time)即时编译器会将编译后的热点代码缓存起来
热点探测(热点代码为经常被执行的代码)
独有方法区,JRockit和J9 VM都没有方法区
Sun公司被Oracle收购
BEA JRockit VM
快
专注服务器应用
没有解释器
全面的JVM解决方案(提供JRockit Real Time解决方案-微秒响应时间;提供Mission Control服务套件-极低开销监控、管理和分析JVM的工具)
BEA公司被Oracle收购
IBM J9 VM
定位类似HotSpot
适合在IBM自家产品上使用
KVM和CDC/CLDC HotSpot VM
CDC/CLDC HotSpot VM是Java ME产品线上的两款VM
KVM是CLDC-HI的早期产品
KVM面向低端功能机市场
KVM简单、轻量、高度可移植
Azul VM
软硬件耦合
超快:Azul VM与Vega系统结合性能>HotSpot
Azul Zing VM
快:Zing VM 在x86平台性能>HotSpot
BEA Liquid VM
也叫JRockit VE(Virtual Edition)
软硬件耦合
不需要运行于操作系统之上,自己实现了专用操作系统
项目已经终止
Apache Harmony
未大规模商用
Java类库代码吸纳进了Android SDK
Microsoft VM
因商业纠纷停用
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进行编译
Dalvik VM
应用于Android系统
不能称作Java虚拟机,因为它没有遵循Java虚拟机规范并且指令集架构也不同
不能直接运行.class文件,执行.dex文件
基于寄存器架构,不是JVM的栈式架构
.dex是编译完成的文件,因此执行效率高
.dev文件可以通过.class文件转化而来
ART VM
Android 5.0替换Dalvik VM
支持提前编译AOT(Ahead of Time Compilation)
应用于Android系统
不能称作Java虚拟机,因为它没有遵循Java虚拟机规范并且指令集架构也不同
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》
作者声明
文章如有问题,欢迎指正!!!
这篇关于JVM内存与垃圾回收-1-JVM与Java初识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
您可能喜欢
Springboot应用的多环境打包入门
11-23
Springboot应用的生产发布入门教程
11-23
Python编程入门指南
11-23
Java创业入门:从零开始的编程之旅
11-23
Java创业入门:新手必读的Java编程与创业指南
11-23
Java对接阿里云智能语音服务入门详解
11-23
Java对接阿里云智能语音服务入门教程
11-23
JAVA对接阿里云智能语音服务入门教程
11-23
Java副业入门:初学者的简单教程
11-23
JAVA副业入门:初学者的实战指南
11-23
JAVA项目部署入门:新手必读指南
11-23
Java项目部署入门:新手必看指南
11-23
Java项目部署入门:新手必读指南
11-23
Java项目开发入门:新手必读指南
11-23
JAVA项目开发入门:从零开始的实用教程
11-23
栏目导航
前端开发
HTML5教程
CSS教程
Javascript
jQuery教程
AJAX教程
Node.js教程
XML教程
正则表达式
后端开发
Go教程
C/C++教程
消息队列MQ
Net Core教程
Asp.net教程
Java教程
PHP教程
移动端开发
微信公众号开发
小程序开发
Swift教程
IOS教程
Kotlin教程
Android开发
数据库
Redis教程
MongoDB教程
PostgreSQL教程
Oracle教程
MariaDB教程
SqLite教程
MySql教程
SqlServer教程
服务器运维
Kubernetes
Docker容器
linux shell
Nginx教程
网站安全
PowerShell教程
Linux教程
人工智能
TensorFlow教程
Python教程
机器学习
人工智能学习
区块链
区块链技术
游戏开发
游戏编程
Unity3D教程
网站运营
网站策划
网站优化
建站知识
大数据/云计算
云计算
Hadoop教程
软件工程
软件/开发工具使用
Git教程
资讯