JVM基础Round 1 | Java语言的前世今生和JVM的发展史

前言:JVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。(来源于百度词条)


目录

Java发展史

为什么学JVM

JDK/JRE/J2SE/Java SE

关于虚拟机的历史

什么是JVM


Java发展史

首先,关于Java产生及发展的时间线如下图所示(图源于网络啊,我画不出来这么好看的,很明显这个图只到2019年):

由图可知,Java的历史满打满算也才不到20年,但是这个未成年的小孩,现在是最大的工业级语言,成为各个大厂的主流语言。

为什么学JVM

学习Java是否从hello word和基础数据类型开始呢?好家伙,我记得我好像是,对于底层的原理什么的知识网络不够清晰,都是零零散散的碎片。

毕竟...初学时觉着这些东西是浮于表面的理论,在我们平时的简单开发中,写代码又用不到JVM的原理。但是,工作之后开始接触公司的项目,前前后后的业务关系导致项目体系庞大,这个时候假如系统出了bug简直头疼到爆炸,但是看着bug又找不到原因,感觉自己写的毫无破绽,实在定位不出问题的时候,只能采取玄学手段:求神拜佛~ 擦,笑死,根本没用

因此想要完善自己的知识体系,从基础知识开始形成一个知识网络,不见得不会有bug了,但总算也是让自己有所长进嘛,之前也不是没学习过这部分的知识,但是自己没将自己的理解总结成文字用自己的话表述一遍,随着时间久而久之简直忘的渣渣都不剩,好了这便是我开始写这个系列学习笔记的目的。

好啦,准备准备开始正文吧,以我自己来讲,刚开始学习的时候就对一些基础概念理解的不是很清楚,甚至后来时间久了开始工作了倒是忘得更加干净了,比如JRE、JDK天天挂在嘴边的东西,要问它是什么我可能都不能立马说出来(写的心好痛,我咋这么菜),所以首先对基础概念做一下说明。

JDK/JRE/J2SE/Java SE

JRE与JDK

首先,JDK和JRE是我们最长遇到的概念,天天挂在嘴边,但是对于他们的区别很多人都搞不清楚(可能是觉得搞清楚没啥用,反正作为开发按部就班的配好一套环境不就能用了)。

简单来说JRE是Java Runtime Environment,英文直译过来就能理解,也就是运行时环境,JRE仅包含Java运行时的必须组件,主要包括Java虚拟机和Java核心类库等。如果当你只是想运行Java程序事实上只要安装JRE即可实现。然后JDK是Java Development Kit,是除了包含JRE之外,还附带了一系列的开发工具和诊断工具,所以如果当你需要进行Java开发的话,就必须安装JDK环境啦~

JDK与J2SE/Java SE

在1998年,JDK1.2版本发布,Java技术体系被拆分为三大体系:J2SE、J2EE、J2ME三大体系。

JDK 与 Java SE 是我们经常混淆的东西,其实 JDK 是指包含了开发、诊断工具的一个组件,Java SE 则是 Java 三大技术体系的一个。

J2SE 称之为标准版技术体系(Java 2 Standard Edition),它包含了构成 Java 语言核心的类,例如:数据库连接、网络编程、接口定义等。J2SE 技术体系主要用于桌面应用软件的编程。正因为 J2SE 包含了 JDK 核心类,所以在我们下载 JDK 时,你会看到其实下载处的文字说明是「Java SE Development Kit 8 - Downloads」。

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 我们弄明白了,那么你知道 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 也是因为类似的命名更换导致的。

果然基础概念写起来就很枯燥无聊,写完回头看看更枯燥了...

关于虚拟机的历史

什么是JVM

关于什么是虚拟机呢?简单通俗一点说虚拟机就是一个翻译官。在Windows系统我们可以安装.exe结尾的软件安装包,但是.exe结尾的安装包却不能在MAC OSX系统上进行安装,也就是说,.exe文件作中会被编译成Windows系统能识别的机器码,而MAC系统需要dmg后缀的文件才能编译成它可以识别的机器码,这也就是系统软件无法通用的问题。但是学习Java的就知道,Java既可以在Windows系统运行也可以在Linux系统运行,这是为什么呢?是因为Java并非像其他语言一样将代码直接编译成系统能识别的机器语言,而是定义了一种语法规定——称之为字节码。但是转换成字节码系统还是无法直接识别到啊,所以呢这时候就要发挥虚拟机的作用了,虚拟机将字节码文件转换成各个系统可以识别的机器码。形象一点来看下图:

注意:Java虚拟机充当了翻译官的角色,但是JVM不仅仅支持Java代码,只要你够nice你也可以用PHP编译成符合JVM规范的字节码文件哈。而且,JVM运行的不是Java代码,而是字节码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值