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的处理 统一处理加减法,无需增加减法器操作