JVM上篇(一、JVM_Java 及 JVM简介)

JVM_(上篇)Java 及 JVM简介

提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!!


JVM

  • JVM_(上篇)Java 及 JVM简介
  • 一. 前言
  • 二. Java 及 JVM简介
    • 1.虚拟机介绍
    • 2.JVM架构模型
    • 3.JVM 生命周期
    • 4.JVM发展


一. 前言

工作中的问题:

  1. 系统突然卡死,OOM
  2. Jvm GC 问题
  3. JVM参数调优
  4. 面试JVM

计算机语言:
JVM上篇(一、JVM_Java 及 JVM简介)_第1张图片
架构师级别要求:

  1. 如何使系统更快?
  2. 如何避免系统出现瓶颈?

为什么学习JVM:

  1. 面试需要
  2. 中高级程序员必备技能(项目管理、调优)
  3. 追求极客精神(垃圾回收、JIT、底层原理)

JAVA VS C++:
JVM上篇(一、JVM_Java 及 JVM简介)_第2张图片

二. Java 及 JVM简介

多语言混合编程:

Java虚拟机可以运行非Java语言编写的程序,只关心“字节码”文件。

1.虚拟机介绍

  1. 系统虚拟机: 物理机仿真
  2. 程序虚拟机: java虚拟机(执行二进制JVM字节码,也可以包括非java字节码)
  3. Java虚拟机:一次编译,到处运行 自动内存管理 自动垃圾回收

JVM的位置:

JVM上篇(一、JVM_Java 及 JVM简介)_第3张图片
JVM上篇(一、JVM_Java 及 JVM简介)_第4张图片
JVM的整体结构:
简图:
JVM上篇(一、JVM_Java 及 JVM简介)_第5张图片
详细图:
JVM上篇(一、JVM_Java 及 JVM简介)_第6张图片
Java代码执行流程:
JVM上篇(一、JVM_Java 及 JVM简介)_第7张图片

2.JVM架构模型

基于栈式架构:

  1. 设计简单,适用于资源受限的系统(嵌入式平台);
  2. 避开寄存器分配难题,使用零地址指令方式分配,执行性能比寄存器方式差;
  3. 指令集更小,指令较多,执行过程依赖操作栈;
  4. 不需要硬件支持,可移植性更好,更好实现跨平台;

基于寄存器架构:

  1. 典型的应用是x86的二进制指令集,如:传统PC以及Android的Davlik虚拟机;
  2. 指令集架构完全依赖硬件,可移植性差;
  3. 性能优秀执行效率高; 花费更少的指令去完成一项操作;
  4. 基于寄存器架构指令集往往都是以一地址指令,二地址指令,和三地址指令为主,而基于栈架构的指令集却是以零地址指令为主;

3.JVM 生命周期

虚拟机启动:

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

虚拟机执行:

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

虚拟机退出:

  1. 程序正常结束;
  2. 程序执行遇到异常或错误而终止;
  3. 操作系统出现错误;
  4. 调用Runtime类(单例模式)的halt()方法 或System类的exit()方法;
  5. JNI(Java Native Interface) 规范描述了用JNI Invocation API来加载或卸载Java虚拟机;

4.JVM发展

JVM上篇(一、JVM_Java 及 JVM简介)_第8张图片
Sun Classic VM:

  1. 世界上第一款商用的Java虚拟机;
  2. 只有解释器(没有JIT编译器),执行效率较低,需要逐行解释;
    注:JIT编译器会识别热点代码,编译好会缓存起来,提高执行效率;但是不能全部使用JIT,否则项目启动会很慢

Exact VM:

准确式内存管理: 可以知道内存中某个位置的数据类型是什么; 具备现代高性能虚拟机的雏形: 热点探测,编译器与解释器混合工作;

HotSpot VM:
热点代码探测技术:

通过计数器找到最具编译价值的代码,触发即时编译或栈上替换; 通过编译器和解释器协同工作,在最优化的程序响应时间和最佳执行性能中取得平衡;

以下会基于HotSpot VM 详细介绍:

EBA的 JRockit VM:

  1. 专注于服务器端的应用:
  2. 不太专注于启动速度,不包含解释器,都靠编译器编译后执行
  3. 世界上最快的JVM

IBM的 J9 VM(简称:IT4J):

  1. 服务器端、桌面应用、嵌入式多用途
  2. 有影响力的三大商用虚拟机之一,也号称世界上最快的java JVM

其他虚拟机:

1.应用在Java ME 以及面向更低端的设备上的: KVM和CDC/CLDC Hotspot

2.高性能虚拟机中的战斗机
特定硬件平台绑定、软硬件配合的专有虚拟机:Azul VM 和 BEA Liquid VM

3.Apache Harmony 虚拟机

4.Microsoft JVM 微软公司

5.Taobao JVM 阿里巴巴

6.Dalvik VM 非Java虚拟机,而是Android系统虚拟机

7.Graal VM (可能取代HotSpot VM) Oracle研发,对HotSpot VM增强,跨语言虚拟机

你可能感兴趣的:(JVM,java)