博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jvm学习笔记--jvm简介
阅读量:3713 次
发布时间:2019-05-21

本文共 1465 字,大约阅读时间需要 4 分钟。

1、JVM在计算机系统所处的位置

 jvm是运行在操作系统之上的,并没有和硬件有直接的交互

2、java及jvm

Java跨平台语言:一次编译,到处运行;java技术的核心就是jvm。

jvm跨语言的平台:只要不同的编程语言的编译器生成的字节码文件遵循jvm规范,就可以在jvm中运行

3、jvm简介

虚拟机就是一台虚拟的计算机,它是一款软件,用来执行一系列虚拟计算机指令,大体上可分为系统虚拟机和程序虚拟机;

VMware 就是属于系统虚拟机,它是完全对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台;

java虚拟机就属于程序虚拟机,它专门为执行单个计算机程序而设计,在java虚拟机中执行的指令称java字节码指令。

作用:jvm就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。

特点:

  1. 一次编译,到处执行
  2. 自动内存管理
  3. 自动垃圾回收功能

架构模型:由于跨平台的设计,java的指令是根据栈来设计的,栈:跨平台、指令集小、指令多;性能比寄存器差。所以jvm是栈的指令集架构(另外一种是基于寄存器的指令集架构)。

发展:三大主流虚拟机HotSpot VM、BEA JRockit和IBM J9

  • SUN Classic VM:第一款商用的虚拟机,内部只提供解释器(响应快,性能差,逐行执行);
  • Exact VM:解释器和编译器(相应慢,性能高,把高频的代码及时的编译成本地的指令缓存起来)混合工作;
  • HotSpot VM :HotSpot指热点代码探测技术,解释器和编译器协同工作,java默认的虚拟机;服务器端、桌面到移动端、嵌入式都有应用;
  • BEA JRockit:(BEA 已被Oracle收购) 专注于服务端应用,世界最快的jvm之一
  • IBM J9:服务器端、桌面应用、嵌入式等多用途VM;
  • Taobao JVM: 目前已经在淘宝、天猫上线,替换了Oracle官方JVM;
  • Dalvik VM:Android虚拟机 DVM,只能称作虚拟机 不能称为java虚拟机,他没有遵循Java虚拟机规范基于寄存器架构,效率高,但是跟硬件耦合度比较高,不能直接执行class文件,执行的是dex文件
  • Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品,在HotSpot虚拟机基础之上增强而成的跨语言全栈虚拟机,可以作为“任何语言”的运行平台使用。

4、jvm内存结构

(1)概览图

(2)详图英文

(3)详图中文

5、java代码的执行流程

 

6、jvm生命周期

(1)启动

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

(2)执行

  • 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;
  • 程序开始执行的时候他才运行,程序结束时他就停止;
  • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。

(3)退出

  • 程序正常执行结束
  • 程序异常或错误而异常终止
  • 操作系统错误导致终止
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且java安全管理器也允许这次exit或halt操作
  • 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

转载地址:http://ryajn.baihongyu.com/

你可能感兴趣的文章
栈的链式存储结构(带头结点的单链表实现)
查看>>
十进制数转为二进制(java实现)
查看>>
栈的应用----括号匹配问题
查看>>
串的模式匹配算法(KMP算法,BF算法+算法详解+实现代码)
查看>>
串的存储结构(堆串)
查看>>
剑指offer13. 机器人的运动范围 P92
查看>>
剑指offer14 . 剪绳子 P96
查看>>
剑指offer16. 数值的整数次方P110
查看>>
剑指offer17. 打印从1到最大的n位数 P114
查看>>
剑指offer18. 在O(1)时间内删除链表节点 P119
查看>>
剑指offer19. 正则表达式匹配 P124
查看>>
剑指offer61. 扑克牌中的顺子 P298
查看>>
为什么重写equals一定要重写hashcode?
查看>>
Java基础补充1
查看>>
二叉树非递归遍历访问总结
查看>>
leetcode94.二叉树非递归遍历(不用栈)
查看>>
证明-快慢指针找链表环
查看>>
C# 委托使用场景
查看>>
c# WinForm通过委托事件实现winform窗体之间的互相刷新
查看>>
为什么JVM使用双亲委派?
查看>>