Java虚拟机详解01----初识JVM
虚拟机:
指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
有哪些虚拟机:
VMWare、Virtual Box:都是使用软件模拟物理CPU的指令集
JVM:使用软件模拟Java 字节码的指令集
二、JVM发展历史:
1、Java发展史:
1996年:SUN JDK 1.0 Classic VM纯解释运行,使用外挂进行JIT
1997年:JDK1.1 发布AWT、内部类、JDBC、RMI、反射
1998年:JDK1.2 Solaris Exact VMJIT 解释器混合
Accurate Memory Management 精确内存管理,数据类型敏感
提升了GC性能
注:JDK1.2开始,称为Java 2,于是有了J2SE J2EE J2ME 的出现,同时加入Swing Collections。
2000年:JDK 1.3,Hotspot 作为默认虚拟机发布加入JavaSound
2002年:JDK 1.4【Java真正走向成熟的一个版本】,Classic VM退出历史舞台加入:Assert 正则表达式 NIO IPV6 日志API 加密类库
2004年:JDK 1.5【至关重要的版本】。即 JDK5 、J2SE 5 、Java 5泛型
注解
枚举
自动装箱
可变长参数
Foreach循环
2006年:JDK 1.6发布,JDK6脚本语言支持
JDBC 4.0
Java编译器 API
2011年:JDK7发布延误项目推出到JDK8
G1(全新的GC收集器)
动态语言增强
64位系统中的压缩指针
NIO 2.0
2014年:JDK8发布【重要的版本】Lambda表达式
语法增强 Java类型注解
2016年:计划发布JDK9模块化
2、重大历史事件:
使用最为广泛的JVM为HotSpotHotSpot 为Longview Technologies开发,被SUN收购
2006年:Java开源,并建立OpenJDKHotSpot 成为Sun JDK和OpenJDK中所带的虚拟机
2008年:Oracle收购BEA得到JRockit VM
2009年4月20日:Oracle公司正式宣布以74亿美金的价格收购Sun公司。得到Hotspot
Oracle宣布在JDK8时整合JRockit和Hotspot,将这两款优秀的虚拟机取长补短,最终合二为一。在Hotspot基础上,移植JRockit优秀特性
三、JVM种类:
1、KVM:
SUN发布
IOS Android兴起之前,广泛用于手机系统
2、CDC/CLDC HotSpot:
手机、电子书、PDA等设备上建立统一的Java编程接口
J2ME的重要组成部分
3、JRockit:
BEA
4、IBM J9 VM:
IBM内部
5、Apache Harmony:
兼容于JDK 1.5和JDK 1.6的Java程序运行平台
与Oracle关系恶劣,退出JCP ,Java社区的分裂
OpenJDK出现后,受到挑战,2011年退役
没有大规模商用经历
对Android的发展有积极作用
四、Java语言规范:
Java语言规范主要体现在以下几点:
五、JVM规范:
JVM主要定义二进制class文件和JVM指令集等。
JVM语言规范主要体现在以下几点:
Class文件类型 运行时数据 虚拟机的启动 虚拟机的指令集此外,JVM需要对Java Library 提供以下支持:(因为这些东西没有办法通过java语言本身来实现)
反射 java.lang.reflect ClassLoader 初始化class和interface 安全相关 java.security
JVM 虚拟机4种垃圾收集算法 垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。
生命壹号 个人网站:smyhvae.com。博客园:cnblogs.com/smyhvae。微信公众号:生命团队 | vitateam
相关文章
- java 针对jvm的面试题_24个Jvm面试题总结及答案
- java sortedset用法_Java SortedSet headSet()用法及代码示例[通俗易懂]
- java转换字符串为时间_JAVA字符串转日期或日期转字符串
- java导出pdf模板_java模板导出PDF[通俗易懂]
- java生成时间戳类型_Java获取当前时间戳的方法有哪些
- java循环语句_Java中的循环语句
- 说一下java的运行机制_Java运行机制是什么?「建议收藏」
- java项目介绍_java项目介绍及创建[通俗易懂]
- java课程设计成绩管理系统_Java课程设计–学生成绩管理系统
- java jersey使用总结_Java Jersey2使用总结
- java中map根据value找key_Java Map和Map<String, Object>类型,map通过value找key
- JAVA数据库连接池_java与数据库的连接怎么实现
- java虚拟机内存大小_jvm内存分布
- Java—java.util.calendar类详解「建议收藏」
- Java面试集锦(一)之Linux
- Java面试集锦(一)之Jvm(虚拟机)
- Java生成随机密码详解编程语言
- java的jvm虚拟机之直接内存的影响问题讲解详解编程语言
- [四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式详解编程语言
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符详解编程语言
- Linux下Java开发:给初学者的指引(linux下java编程)
- java字符串去除反斜杠/详解编程语言
- Java 虚拟机总结 – JVM 内存区域详解编程语言
- Java数组转ArrayList的注意事项详解编程语言
- 更新LINUX下的Java版本(linux更新java)
- Linux监控JVM系统性能优化实战(linux监控jvm)
- MySQL与Java的结合:实现强大的数据持久化功能(mysql与java)
- Linux与Java:驱动着计算未来(linux与java)
- 控制Redis Java实现过期控制(redisjava过期)
- key解决Redis Java中过期key的问题(redisjava过期)
- Linux环境中如何顺利执行Java程序?(linux下执行java)
- Java在Linux下的路径探索(javalinux路径)
- 如何在Linux中停止运行Java程序(linux停止java)
- 如何在Linux上查看JVM运行信息(Linux查看jvm)
- 使用Java实现Redis锁定的实现(redis锁定 java)
- 在Oracle JVM环境下进行下载的指南(oracle jvm下载)
- java数字图像处理基础使用imageio写图像文件示例