1.初识JVM – JVM规范

版权声明:版权归零零天所有 https://blog.csdn.net/qq_39188039/article/details/84580935

初识JVM

  • JVM的概念
  • JVM发展历史
  • JVM种类
  • Java语言规范
  • JVM规范

JVM是Java Virtual Machine的简称。意为Java虚拟机

虚拟机

指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统

有哪些虚拟机

VMWare
Visual Box
JVM

VMWare或者Visual Box都是使用软件模拟物理CPU的指令集

JVM使用软件模拟Java 字节码的指令集

Java和JVM的历史

  • 1996年 SUN JDK 1.0 Classic VM
    纯解释运行,使用外挂进行JIT
  • 1997年 JDK1.1 发布
    AWT、内部类、JDBC、RMI、反射
  • 1998年 JDK1.2 Solaris Exact VM
    JIT 解释器混合
    Accurate Memory Management 精确内存管理,数据类型敏感
    提升的GC性能
  • 2000年 JDK 1.3 Hotspot 作为默认虚拟机发布
    加入JavaSound
  • 2002年 JDK 1.4 Classic VM退出历史舞台
    Assert 正则表达式 NIO IPV6 日志API 加密类库
  • 2004年发布 JDK1.5 即 JDK5 、J2SE 5 、Java 5
    泛型
    注解
    装箱
    枚举
    可变长的参数
    Foreach循环
  • JDK1.6 JDK6
    脚本语言支持
    JDBC 4.0
    Java编译器 API
  • 2011年 JDK7发布
    延误项目推出到JDK8
    G1
    动态语言增强
    64位系统中的压缩指针
    NIO 2.0
  • 2014年 JDK8发布
    Lambda表达式
    语法增强 Java类型注解
  • 2016年JDK9
    模块化

说明:JDK1.2开始 称为Java 2
J2SE J2EE J2ME 的出现
加入Swing Collections

Java和JVM的历史 – 大事记

  • 使用最为广泛的JVM为HotSpot
  • HotSpot 为Longview Technologies开发 被SUN收购
  • 2006年 Java开源 并建立OpenJDK
    • HotSpot 成为Sun JDK和OpenJDK中所带的虚拟机
  • 2008 年 Oracle收购BEA
    • 得到JRockit VM
  • 2010年Oracle 收购 Sun
    • 得到Hotspot
  • Oracle宣布在JDK8时整合JRockit和Hotspot,优势互补
    • 在Hotspot基础上,移植JRockit优秀特性

各式JVM

  • KVM
    • SUN发布
    • IOS Android前,广泛用于手机系统
  • CDC/CLDC HotSpot
    • 手机、电子书、PDA等设备上建立统一的Java编程接口
    • J2ME的重要组成部分
  • JRockit
    • BEA
  • BM J9 VM
    • IBM内部
  • Apache Harmony
    • 兼容于JDK 1.5和JDK 1.6的Java程序运行平台
    • 与Oracle关系恶劣 退出JCP ,Java社区的分裂
    • OpenJDK出现后,受到挑战 2011年 退役
    • 没有大规模商用经历
    • 对Android的发展有积极作用

规范

  • Java语言规范

    • 语法
    • 变量
    • 类型
    • 文法
  • JVM规范

    • Class文件类型
    • 运行时数据
    • 帧栈
    • 虚拟机的启动
    • 虚拟机的指令集
  • 词法结构

    • Int
      • 0 2 0372 0xDada_Cafe 1996 0x00_FF__00_FF
    • Long
      • 0l 0777L 0x100000000L 2_147_483_648L 0xC0B0L
    • Float
      • 1e1f 2.f .3f 0f 3.14f 6.022137e+23f
    • Double
      • 1e1 2. .3 0.0 3.14 1e-9d 1e137
    • 操作
      • += -= *= /= &= |= ^= %= <<= >>= >>>=
  • 类型和变量

    • 元类型

      • byte short int long float char
    • 变量初始值

      • boolean false
      • char \u0000
    • 泛型

Java语言规范

  • Java内存模型

  • 类加载链接的过程

  • public static final abstract的定义

  • 异常

  • 数组的使用

  • …….

  • Java语言规范定义了什么是Java语言

  • Java语言和JVM相对独立

    • Groovy
    • Clojure
    • Scala
  • JVM主要定义二进制class文件和JVM指令集等

  • Class 文件格式

  • 数字的内部表示和存储

    • Byte -128 to 127 (-27 to 27 - 1)
  • returnAddress 数据类型定义

    • 指向操作码的指针。不对应Java数据类型,不能在运行时修改。Finally实现需要
  • 定义PC

  • 方法区

  • 整数的表达

    • 原码:第一位为符号位(0为正数,1为负数)
    • 反码:符号位不动,原码取反
    • 负数补码:符号位不动,反码加1
    • 正数补码:和原码相同
    • 打印整数的二进制表示
	int a=-6;
	for(int i=0;i<32;i++){
		int t=(a & 0x80000000>>>i)>>>(31-i);
		System.out.print(t);
	}

在这里插入图片描述

  • VM指令集
    • 类型转化
      • l2i
    • 出栈入栈操作
      • aload astore
    • 运算
      • iadd isub
    • 流程控制
      • ifeq ifne
    • 函数调用
      • invokevirtual invokeinterface invokespecial invokestatic
  • JVM需要对Java Library 提供以下支持:
    • 反射 java.lang.reflect
    • ClassLoader
    • 初始化class和interface
    • 安全相关 java.security
    • 多线程
    • 弱引用
  • JVM的编译
    • 源码到JVM指令的对应格式
    • Javap
    • JVM反汇编的格式
      • [ [ … ]] []

猜你喜欢

转载自blog.csdn.net/qq_39188039/article/details/84580935