JVM学习——1 JAVA的发展

从这篇开始,后面几篇文章开始学习JVM相关内容。

JVM的技术所需要关注的

JVM技术从虚拟机到类加载,到硬件支持有许多很重要的知识点,因为内容太过复杂,所以本次学习只能针对其中一些内容进行学习。主要是针对平时面试中被关注最多的几个地方

  • JVM的数据区域
  • 垃圾回收
    1. 垃圾回收的算法
    2. 垃圾回收收集器
    3. 垃圾回收内存分配策略
  • 类运行
    1. 类加载顺序
    2. 类执行顺序
  • 并发支持
    1. JAVA内存模型
    2. 线程优化

Java概述

本篇主要学JAVA的一些平台分布以及发展历史。

Java技术平台

Java平台即由Java编程语言所撰写的软件赖以运行的平台,JAVA的技术平台主要有4个。

  • Java Card:支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。

  • Java ME(Micro Edition):支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,这个版本以前称为J2ME。

  • Java SE(Standard Edition):支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,这个版本以前称为J2SE。

  • Java EE(Enterprise Edition):支持使用多层架构的企业应用(如ERP、CRM应用)的Java平台,除了提供Java SE API外,还对其做了大量的扩充并提供了相关的部署支持,这个版本以前称为J2EE。

Java版本发展

既然使用JAVA这门语言,对于这门语言的诞生历史,我觉得作为开发者还是需要了解下

发布时间 版本 内容
1995年5月23日 Oak语言改名为Java,并且在SunWorld大会上正式发布Java 1.0版本。 Java语言第一次提出了“Write Once,Run Anywhere”的口号。
1996年1月23日 JDK 1.0发布 Java语言有了第一个正式版本的运行环境。JDK 1.0提供了一个纯解释执行的Java虚拟机实现(Sun Classic VM)
1997年2月19日 JDK 1.1 JDK 1.1版的技术代表有:JAR文件格式、JDBC、JavaBeans、RMI。Java语法也有了一定的发展,如内部类(Inner Class)和反射(Reflection)都是在这个时候出现的。
1998年12月4日 JDK 1.2,工程代号为Playground(竞技场) Java添加了strictfp关键字与现在Java编码之中极为常用的一系列Collections集合类。并且这个版本中Java虚拟机第一次内置了JIT(Just In Time)编译器。
2000年5月8日 工程代号为Kestrel(美洲红隼)的JDK 1.3发布 改进主要表现在一些类库上
2002年2月13日 JDK 1.4发布,工程代号为Merlin(灰背隼) 新的技术特性,如正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等。
2004年9月30日 JDK 1.5发布,工程代号Tiger(老虎) 自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)等语法特性都是在JDK1.5中加入的
2006年12月11日 JDK 1.6发布,工程代号Mustang(野马) 启用Java SE 6、Java EE 6、Java ME 6的命名方式。JDK 1.6的改进包括:提供动态语言支持、提供编译API和微型HTTP服务器API等
2011年07年28日 Java SE 7.0 (1.7.0) Dolphin(海豚) 自动资源管理;改进的通用实例创建类型推断;数字字面量下划线支持;switch中使用string;二进制字面量;简化可变参数方法调用;引入Java NIO.2开发包。
2014年03年18日 Java SE 8.0 (1.8.0) Spider(蜘蛛) 接口的默认方法Lambda 表达式函数式接口方法与构造函数引用Lambda 作用域访问局部变量访问对象字段与静态变量访问接口的默认方法Date APIAnnotation 注解
2017年09年21日 Java SE 9 模块化系统 jShell命令 多版本兼容jar包、接口的私有方法、钻石操作符的使用升级语法改进:try语句、下划线使用限制、String存储结构变更、便利的集合特性:of()增强的Stream API、多分辨率图像 API、全新的HTTP客户端API、Deprecated的相关API智能Java编译工具、统一的JVM日志系统、javadoc的HTML 5支持、Javascript引擎升级:Nashornjava的动态编译器
2018年03年14日 Java SE 10

Java虚拟机发展史

Java随着版本和公司的不同存在着不同的虚拟机品牌。当然本篇只是简单的了解下sun公司出的相关虚拟机。

Classic VM

1996年1月23日,Sun公司发布JDK1.0,Java语言首次拥有了商用的正式运行环境,这个JDK中所带的虚拟机就是Classic VM。

这款虚拟机只能使用纯解释器方式来执行Java代码,如果要使用JIT编译器,就必须进行外挂。但是假如外挂了JIT编译器,JIT编译器就完全接管了虚拟机的执行系统,解释器便不再工作了由于解释器和编译器不能配合工作,这就意味着如果要使用编译器执行,编译器就不得不对每一个方法、每一行代码都进行编译,而无论它们执行的频率是否具有编译的价值。“Java语言很慢”的形象就是在这时候开始在用户心中树立起来的。

HotSpot VM

它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。

HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如。通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译

Sun公司发布的其他Java虚拟机有:

KVM

KVM中的K是“Kilobyte”的意思,它强调简单、轻量、高度可移植,但是运行速度比较慢。在Android、iOS等智能手机操作系统出现前曾经在手机平台上得到非常广泛的应用。

CDC/CLDC HotSpot Implementation

CDC/CLDC全称是Connected(Limited)Device Configuration,在JSR-139/JSR-218规范中进行定义,它希望在手机、电子书、PDA等设备上建立统一的Java编程接口,而CDC-HI VM和CLDC-HI VM则是它们的一组参考实现。CDC/CLDC是整个Java ME的重要支柱

Squawk VM

运行于Sun SPOT(Sun Small Programmable ObjectTechnology,一种手持的WiFi设备),也曾经运用于Java Card。这是一个Java代码比重很高的嵌入式虚拟机实现,其中诸如类加载器、字节码验证器、垃圾收集器、解释器、编译器和线程调度都是Java语言本身完成的,仅仅靠C语言来编写设备I/O和必要的本地代码。

JavaInJava

JavaInJava是Sun公司于1997年~1998年间研发的一个实验室性质的虚拟机,从名字就可以看出,它试图以Java语言来实现Java语言本身的运行环境,既所谓的“元循环”(Meta-Circular,是指使用语言自身来实现其运行环境)。它必须运行在另外一个宿主虚拟机之上,内部没有JIT编译器,代码只能以解释模式执行。在20世纪末主流Java虚拟机都未能很好解决性能问题的时代,开发这种项目,其执行速度可想而知。

Maxine VM

Maxine VM和上面的JavaInJava非常相似,它也是一个几乎全部以Java代码实现(只有用于启动JVM的加载器使用C语言编写)的元循环Java虚拟机。这个项目于2005年开始,到现在仍然在发展之中,比起JavaInJava,Maxine VM就显得“靠谱”很多,它有先进的JIT编译器和垃圾收集器(但没有解释器),可在宿主模式或独立模式下执行,其执行效率已经接近了HotSpot Client VM的水平。

你可能感兴趣的:(JAVA,#,JVM)