深入理解java虚拟机一之走进Java
Java技术体系
Java程序设计语言、Java虚拟机、Java API类库统称为JDK
Java API类库中Java SE API子集和Java虚拟机统称为JRE
Java发展史
1991年4月 Java语言的前身-Oak语言启动
1995年5月 Oak改名为Java并发布1.0版本 Write Once,Run Anywhere
1996年1月 JDK 1.0版本发布 提供的Java虚拟机实现(Sun Classic VM) 、Applet、AWT
1997年2月 JDK 1.1版本发布 提供了JAR文件格式、JDBC、JavaBeans、RMI
1998年12月 JDK1.2版本发布 Java拆分如下三个方向,虚拟机添加HotSpot VM和Exact VM Java ME 支持Java程序运行在移动终端的平台
Java SE 支持面向桌面级应用的Java平台
Java EE 支持使用多层架构的企业应用的Java平台
2000年5月 JDK 1.3版本发布 默认虚拟机改为HotSpot VM
2002年2月 JDK 1.4版本发布 提供正则表达式、异常链、NIO、XML解析器和XSLT转换器等
2004年9月 JDK 1.5版本发布 提供了自动拆箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach)等语法特性,提供了java.util.concurrent并发包等,改进了Java内存模型
2006年12月 JDK 1.6版本发布 提供动态语言支持、提供编译API和微型HTTP服务器API等,对Java虚拟机内部做了大量改进
2009年2月 JDK 1.7版本发布 提供新的G1收集器、加强对非Java语言调用支持、升级类加载架构
2009年4月 Oracle公司宣布以74亿美元收购Sun公司
Java虚拟机发展史
Sun Classic / Exact VM
- Sun Classic 是世界第一款商用Java虚拟机,这款虚拟机只能以纯解释器方式执行代码,不能与编译器配合工作,因此执行效率与传统C/C++程序有很大差距;
- 为了提升Classic VM的运行效率,在JDK 1.2版本时Sun发布了Exact VM虚拟机,具备两级即使编译器、编译器与解释器混合工作模式以及准确式内存管理。虽然Exact VM比CLassic VM先进不少,但是它只存在了很短的时间就被HotSpot VM取代
Sun HotSpot VM
HotSpot VM是Sun在1997年收购Longview Technologies公司从而获得的,它既继承了Sun之前两款虚拟机的优点,也有许多自己新的优势,比如热点代码探测技术。
BEA JRockit / IBM J9 VM
- JRockit VM曾号称“世界上速度最快的Java虚拟机”,BEA将其发展为专门为服务器硬件和服务端应用场景高度优化的虚拟机,不太关注程序启动速度,不包含解析器实现。
- J9 VM是由IBM Ottawa实验室一个名为SmallTalk的虚拟机扩展而来,是一款设计上从服务器端到桌面应用再到嵌入式都全面考虑的多用途虚拟机
Azul VM / BEA Liquid VM
- Azul VM是Auzl Systems公司在HotSpot基础上大量改进,运行于专有硬件Vega系统上的Java虚拟机
- Liquid VM即是现在的JRockit VE,是BEA开发运行在自家Hypervisor系统上的JRockit VM的虚拟化版本
其它VM
深入理解java虚拟机一之走进Java的更多相关文章
- 深入理解java虚拟机-第二章:java内存区域与内存泄露异常
2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...
- Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在曾经的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本的语法 ...
- 【深入Java虚拟机】之一:Java内存模型与内存溢出
[深入Java虚拟机]之:Java内存区域与内存溢出 高速缓存模型如下: ----------------------------------------------------分割线-------- ...
- 【深入Java虚拟机】之一:Java内存模型
[深入Java虚拟机]之:Java内存区域与内存溢出 内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个 ...
- java虚拟机jvm启动后java代码层面发生了什么?
java虚拟机jvm启动后java代码层面发生了什么? 0000 我想验证的事情 java代码在被编译后可以被jdk提供的java命令进行加载和运行, 在我们的程序被运行起来的时候,都发生了什么事情, ...
- 【java虚拟机系列】从java虚拟机字节码执行引擎的执行过程来彻底理解java的多态性
我们知道面向对象语言的三大特点之一就是多态性,而java作为一种面向对象的语言,自然也满足多态性,我们也知道java中的多态包括重载与重写,我们也知道在C++中动态多态是通过虚函数来实现的,而虚函数是 ...
- 《深入理解java虚拟机》第二章 Java内存区域与内存溢出异常
第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域
- 重读《深入理解Java虚拟机》二、Java如何分配和回收内存?Java垃圾收集器如何工作?
线程私有的内存区域随用户线程的结束而回收,内存分配编译期已确定,内存分配和回收具有确定性.共享线程随虚拟机的启动.结束而建立和销毁,在运行期进行动态分配.垃圾收集器主要对共享内存区域(堆和方法区)进行 ...
- 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分
一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...
随机推荐
- Java内存泄漏的几种可能
Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏. 长生命周期的对象持有短生命周期对象的引用就很可能发 ...
- Java并发编程75个问答
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...
- 2101244 - FAQ: SAP HANA Multitenant Database Containers (MDC)
Symptom You face issues or have questions related to multitenant database containers in SAP HANA env ...
- lvm管理:扩展lv、删除pv、lv等
从卷组VG里扩展lv.删除pv,并删除物理卷PV 一.扩展LV.缩小LV 1.卸载LV 命令:umount "挂载目录" 2.扩展LV 命令:lvextend -L +500m ...
- python grib气象数据可视化
基于Python的Grib数据可视化 利用Python语言实现Grib数据可视化主要依靠三个库——pygrib.numpy和matplotlib.pygrib是欧洲中期天气预报中心 ...
- centos实现永久修改hostname
前言 介绍一下centos的两种修改hostname的方式. 查看hostname [root@slave02 ~]# hostname slave02 临时性修改 [root@slave02 ~]# ...
- 用 Python + itchat 写一个爬虫脚本每天定时给女朋友发微信暖心话
https://github.com/sfyc23/EverydayWechat.git
- C语言冷知识
C语言属强类型语言(1)编程语言分2种:强类型语言和弱类型语言.强类型语言中所有的变量都有自己固定的类型,这个类型有固定的内存占用,有固定的解析方法:弱类型语言中没有类型的概念,所有变量全都是一个类型 ...
- jeesite 下载ckfinder上传的文件
在需要下载的位置,将以下代码复制到页面最下方,就可以实现文件下载了 <script> $(document).ready(function() { var fileName = $(&qu ...
- cdn贝四层协议配置端口映射TCP端口转发
端口映射就是将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务.当用户访问该IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上.端口映射有动态和静态之分 1.安装好节点后初 ...