JVM基础系列第1讲:Java 语言的前世今生
Java 语言是一门存在了 20 多年的语言,其年纪比我自己还大。虽然存在了这么长时间,但 Java 至今都是最大的工业级语言,许多大型互联网公司均采用 Java 来实现其业务系统。大到国际电商巨头阿里巴巴,小到无名小公司,我们均可看到 Java 的身影。
我是 2010 年开始接触 Java 语言的,在我刚刚接触 Java 的时候,我经常对于 Java 中的一些基本概念弄不清楚。例如:JDK 7 与 Java SE 7 有什么区别?JDK 与 JRE 有什么区别 ?Java SE 与 Java EE 有什么区别 ?等等。
上面这些问题其实都是 Java 中最最基础的知识,如果没有搞懂这些基础的知识,就不用谈更加深入的学习了。所以在开始学习 JVM 相关知识之前,我们这一节就来把那些我们经常混淆的概念弄清楚。
JDK 与 JRE
JDK 与 JRE 是我们经常遇到的概念,但许多学习了几年的开发都搞不懂他们之间的区别。简单地说 JRE(Java Runtime Environment)仅包含运行 Java 程序的必需组件,包括 Java 虚拟机以及 Java 核心类库等。而 JDK(Java Development Kit)除了包含 JRE外,还附带了一系列开发、诊断工具。
一般来说,如果只需要运行 Java 程序,那么你安装 JRE 即可。但如果你要进行 Java 程序的开发,那么你就需要安装 JDK。
JDK 与 J2SE
JDK 与 Java SE 是我们经常混淆的东西,其实 JDK 是指包含了开发、诊断工具的一个组件,Java SE 则是 Java 三大技术体系的一个。要弄懂这一点,就要了解 Java 语言的历史。在 1998 年,JDK 1.2 发布,Java 技术体系被拆分为 J2SE、J2EE、J2ME 三大体系。
J2SE 称之为标准版技术体系(Java 2 Standard Edition),它包含了构成 Java 语言核心的类,例如:数据库连接、网络编程、接口定义等。J2SE 技术体系主要用于桌面应用软件的编程。正因为 J2SE 包含了 JDK 核心类,所以在我们下载 JDK 时,你会看到其实下载处的文字说明是「Java SE 11.0.1 is the latest release for JDK 11」。
J2EE 称之为企业版技术体系(Java 2 Enterprise Edition),它除了包含 J2SE 中的类,还包含用于开发企业级应用的类,比如:Servlet、JSP、EJB 等。J2EE 技术体系主要用于分布式的网络程序的开发,如电子商务网站等。
J2ME 称之为嵌入式技术体系(Java 2 Micro Edition),它包含 J2SE 中的一部分类。J2ME 技术体系主要用于消费类电子产品的软件开发,例如:手机、PDA、寻呼机等。
通过这么一介绍,我相信大家都明白 JDK 与 Java SE 的区别了。简单地说,JDK 是一个核心库、开发工具、诊断工具的合集,而 Java SE 则是一个技术体系。
J2SE 与 Java SE
J2SE 我们弄明白了,那么你知道 J2SE 与 Java SE 这两者有什么区别吗?
其实它们指的是同一个东西,只不过在 2006 年 JDK 1.6 发布的时候,其将 J2SE、J2EE、J2ME 的命名方式改为 Java SE 6、Java EE 6、Java ME 6。
所以在下一次 JDK 1.7 发布的时候,其对应的三个技术体系就叫做:Java SE 7、Java EE 7、Java ME 7。比起之前的命名方式,其增加了 JDK 的版本号,能够更加清晰地表明技术体系所属的 JDK 版本。
与这个类似的还有一个:JDK 1.7 与 JDK 7。其实从上面 J2SE 与 Java SE 的变更,我们可以推断,JDK 1.7 与 JDK 7 也是因为类似的命名更换导致的。
经过上面的简单介绍,相信大家对于一些基础概念的理解都差不多了。Java 语言发展至今已有多年历史,但其也不是一蹴而就的,一开始 Java 语言知识一个小小的 Oak 语言。
Java 语言的历史
在 1991 年,James Gosling 博士发布了 Oak,这个是 Java 语言的前身。但一直到 1995 年的时候,Oak 语言才改名为 Java。
- 1991 年,James Gosling 博士发布产品 Oak,这是 Java 语言的前身。
- 1995 年,Oak 语言改名为 Java。
- 1996 年,JDK1.0 发布,提供了纯解释执行的 Java 虚拟机实现:Sun Classic VM。
- 1997 年,JDK1.1 发布,代表技术有:JDBC、JavaBeans、内部类、反射。
- 1998 年,JDK1.2 发布,Java 技术体系被拆分为 J2SE、J2EE、J2ME 三大体系。
- 2000 年,JDK1.3 发布,默认的 Java 虚拟机由 Sun Classic VM 改为 HotSopt。
- 2002 年,JDK1.4 发布,Java 真正走向成熟,代表技术有:正则表达式、NIO等。
- 2004 年,JDK1.5 发布,对语法易用性做了很大改进,新增了泛型、枚举等,代表技术有:并发包等。
- 2006 年,JDK1.6 发布,将 J2EE/J2SE/J2ME 的命名方式改为 Java SE 6、Java EE 6、Java ME 6。
- 2009 年,Sun 公司因为经营不善被 Oracle 公司收购。
- 2011 年,JDK1.7 发布。
- 2013 年,JDK1.8 发布。
从上面的历史我们可以知道 Java 语言具有众多的特性,但是其众多特性并不是一蹴而就的,而是一点点迭代而来的。JDK 每个版本新增的语言特性如下:
- 1997 年,JDK1.1 发布,新增了JDBC、JavaBeans、内部类、反射。
- 2002 年,JDK1.4 发布,新增了正则表达式、NIO等。
- 2004 年,JDK1.5 发布,新增了泛型、枚举、并发包等。
总结
我们这一节简单地介绍了一些常见概念上的区别,以及 Java 语言的历史。通过这一节的内容,我们能对 Java 语言的发展有一个大致的理解,便于我们后续进行更加深入的学习。
如果只是看,其实无法真正学会知识的。为了帮助大家更好地学习,我建了一个虚拟机群,专门讨论学习 Java 虚拟机方面的内容,每周针对我所发文章进行讨论答疑。如果你有兴趣,关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友,小助手会拉你入群。
JVM基础系列文章目录
- JVM基础系列开篇:为什么要学虚拟机?
- JVM基础系列第1讲:Java 语言的前世今生
- JVM基础系列第2讲:Java 虚拟机的历史
- JVM基础系列第3讲:到底什么是虚拟机?
- JVM基础系列第4讲:从源代码到机器码,发生了什么?
- JVM基础系列第5讲:字节码文件结构
- JVM基础系列第6讲:Java虚拟机内存结构
- JVM基础系列第7讲:JVM类加载机制
- JVM基础系列第8讲:JVM 垃圾回收机制
- JVM基础系列第9讲:JVM垃圾回收器
- JVM基础系列第10讲:垃圾回收的几种类型
- JVM基础系列第11讲:JVM参数之堆栈空间配置
- JVM基础系列第12讲:JVM参数之查看JVM参数
- JVM基础系列第13讲:JVM参数之追踪类信息
- JVM基础系列第14讲:JVM参数之GC日志配置
- JVM基础系列第15讲:JDK性能监控命令
JVM基础系列第1讲:Java 语言的前世今生的更多相关文章
- JVM基础系列第6讲:Java 虚拟机内存结构
看到这里,我相信大家对于一个 Java 源文件是如何变成字节码文件,以及字节码文件的含义已经非常清楚了.那么接下来就是让 Java 虚拟机运行字节码文件,从而得出我们最终想要的结果了.在这个过程中,J ...
- JVM基础系列第2讲:Java 虚拟机的历史
说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRock ...
- JVM基础系列第15讲:JDK性能监控命令
查看虚拟机进程:jps 命令 jps 命令可以列出所有的 Java 进程.如果 jps 不加任何参数,可以列出 Java 程序的进程 ID 以及 Main 函数短名称,如下所示. $ jps 6540 ...
- JVM基础系列第14讲:JVM参数之GC日志配置
说到 Java 虚拟机,不得不提的就是 Java 虚拟机的 GC(Garbage Collection)日志.而对于 GC 日志,我们不仅要学会看懂,而且要学会如何设置对应的 GC 日志参数.今天就让 ...
- JVM基础系列第13讲:JVM参数之追踪类信息
我们都知道 JVM 在启动的时候会去加载类信息,那么我们怎么得知他加载了哪些类,又卸载了哪些类呢?我们这一节就来介绍四个 JVM 参数,使用它们我们就可以清晰地知道 JVM 的类加载信息. 为了方便演 ...
- JVM基础系列第11讲:JVM参数之堆栈空间配置
JVM 中最重要的一部分就是堆空间了,基本上大多数的线上 JVM 问题都是因为堆空间造成的 OutOfMemoryError.因此掌握 JVM 关于堆空间的参数配置对于排查线上问题非常重要. tips ...
- JVM基础系列第10讲:垃圾回收的几种类型
我们经常会听到许多垃圾回收的术语,例如:Minor GC.Major GC.Young GC.Old GC.Full GC.Stop-The-World 等.但这些 GC 术语到底指的是什么,它们之间 ...
- JVM基础系列第9讲:JVM垃圾回收器
前面文章中,我们介绍了 Java 虚拟机的内存结构,Java 虚拟机的垃圾回收机制,那么这篇文章我们说说具体执行垃圾回收的垃圾回收器. 总的来说,Java 虚拟机的垃圾回收器可以分为四大类别:串行回收 ...
- JVM基础系列第8讲:JVM 垃圾回收机制
在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...
随机推荐
- 2018-2019 20165235 网络对抗技术 Exp0:kali的安装
2018-2019 20165235 网络对抗技术 Exp0:kali的安装 安装kali 在官网上https://www.kali.org/下载kali 下载之后进行解压 打开VMware-> ...
- 微服务框架——SpringCloud(四)
1.Spring Cloud Config 分布式配置 a.Config服务器 ①新建springboot项目,依赖选择Config Server ②pom文件关键依赖 <parent> ...
- 怎样在ASP.NET(C#) 使用Json序列化反序列化问题?
using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Serializat ...
- python中for嵌套打印图形
# 打印出九九乘法表 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 4 * 3 = 1 ...
- PCB Mark点相关
1)Mark点用于锡膏印刷和元件贴片时的光学定位.根据Mark点在PCB上的作用,可分为拼板Mark点.单板Mark点.局部Mark点(也称器件级MARK点) 2)拼板的工艺边上和不需拼板的单板上应至 ...
- 数据分析 大数据之路 四 numpy 2
NumPy 数学函数 NumPy 提供了标准的三角函数:sin().cos().tan(import numpy as np a = np.array([0,30,45,60,90])print (' ...
- 记录一次DataTable排序的问题
//dt.DefaultView.Sort = "字段名 方式"; 最开始用的上面的没好用,改成底下转换了一下就好用了0.0 DataView dv = new DataView( ...
- 20175324王陈峤宇 《Java程序设计》第六周学习总结
教材学习内容总结 第七章 一.内部类与外部类的关系 1.内部类可以使用外嵌类的成员变量和方法.2.类体中不可以声明类变量和类方法,外部类可以用内部类声明对象.3.内部类仅供外嵌类使用.4.类声明可以使 ...
- GYM 101617 F
说到这题还要提到周日下午训练赛,都进去了hmc说他这场单切过准备换一场. 很不幸的是我当时已经开了这个几何题, 开场就开几何是什么鬼啊!!! 给你n个圆,找一点在所有园内并且离原点最远.(保证有解) ...
- js数组和对象相等判断、拷贝详解(结合几个现象讲解引用数据类型的趣事)
序言 最近遇到几个js引用数据类型造成的bug,今天结合bug详细分析一下,避免以后再犯,也希望能帮大家提个醒,强化js基本功. 目录 1.浅拷贝.深拷贝,解决变量赋值相互影响问题 2.判断2个数组. ...