深入JVM内核之 —— 初识JVM

2,797 阅读3分钟

JVM的概念

jvm是Java Virtual Machine 的简称意味Java虚拟机,指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统

有哪些虚拟机

  虚拟机名称  实现方式
  VMWare      使用软件模拟物理CPU的指令集
  Visual Box  使用软件模拟物理CPU的指令集
  JVM         使用软件模拟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性能。从这时开始称为Java2 J2SE J2EE J2ME得出现加入Swing Collections

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 模块化

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 - 各式JVM

KVM :SUN发布,IOS Android前,广泛用于手机系统

CDC/CLDC HotSpot :手机、电子书、PDA等设备上建立统一的Java编程接口 J2ME的重要组成部分

JRockit :BEA

IBM J9 VM : IBM内部

Apache Harmony : 兼容于JDK 1.5和JDK 1.6的Java程序运行平台与Oracle关系恶劣 退出JCP ,Java社区的分裂 OpenJDK出现后,受到挑战 2011年 退役 没有大规模商用经历 对Android的发展有积极作用

初识JVM – 规范

Java语言规范

  语法 变量 类型 文法 

JVM规范

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

Java语言规范定义了什么是Java语言,Java语言和JVM相对独立,Groovy、Clojure、Scala,这三种都可以运行在JVM上。JVM主要定义二进制class文件和JVM指令集等

整数得表达

原码:第一位为符号位(0为正数,1为负数)

反码:符号位不动,原码取反

负数补码:符号位不动,反码加1

正数补码:和原码相同

打印整数的二进制表示 int a=-6; for(int i=0;i<32;i++){ int t=(a & 0x80000000>>>i)>>>(31-i); System.out.print(t); }

为什么要用到补码呢? 因为在人们的计算概念中零是没有正负之分的,统一0的处理 统一处理加减法,无需增加减法器操作