Java虚拟机1:什么是Java
闲话
参加工作一年多来,一直对JVM都是抱着神圣的、未知的态度,感觉可望而不可即。最近Kafka集群有个问题困扰了我很久,服务器莫名其妙宕机,网上找了很多资料也没有解决。后来无可奈何,设置成了每天定时重启集群,然而只是暂时解决了这个问题,我并没有找到问题的根源,鬼知道它什么时候又会出问题。这让我深刻明白一个道理,要真正掌握一项技术,必须深入到底层,必须吃透,否则你永远是一个只会增删改查的码农。Kafka的底层现在依然在学习,现在还是停留在比较浅显的层次,学无止境啊。在解决上述我说到的这个问题时,再一次遇到了JVM的相关知识,现在更加深刻的知道,理解掌握jvm原理对Java开发者是多么重要。人生而懒惰,需要经常提醒自己现实社会的残酷性,这也是我打算写博客的原因之一。常说技术改变世界,具体对开发者而言,即代码改变世界,我要为了这一崇高的理想而努力奋斗。废话不多说,鸡血打完了,下面直接上干货(以下内容都是基于另外一篇博客整理的,包括后续的全部系列博客都是站在巨人的肩膀上学习,特此声明,原文出处:http://www.cnblogs.com/xrq730/p/4826691.html)。
什么是Java
Java设计者们将Java划分为3种结构独立但却彼此依赖的技术体系分支,它们分别对应着不同的规范集合和组件:
1、Java SE(标准版),主要活跃在桌面领域,主要包含了Java API组件。
2、Java EE(企业版),活跃在企业级领域,除了包含Java API组件外,还扩充有Web组件、事务组件、分布式组件、EJB组件、消息组件等,综合这些技术,开发人员完全可以构建出一个具备高性能、结构严谨的企业级应用,并且Java EE也是用于构建SOA(面向服务架构)的首选平台。
3、Java ME(精简版),活跃在嵌入式领域,称之为精简版的原因是,它仅保留了Java API中的部分组件,以及适应设备的一些特有组件。
Java发展至今已经演变为了一套强大的技术体系,那么组成这套技术体系的的具体技术包括了以下四项:
1.Java编程语言
2.字节码
3.Java API,包括Java API类库,和来自商业机构以及开源社区的第三方类库
4.Java虚拟机
Java的优点
Java能获得如此广泛的认可,除了它拥有一门结构严谨、面向对象的编程语言之外,还有许多不可忽视的优点:
1、它摆脱了硬件平台的束缚,实现了“一次编写、到处运行”
2、它提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题
3、它实现了热点代码检测和运行时编译及优化,这使得Java应用能随着运行时间的增加而获得更高的性能
4、它有一套完整的应用程序接口,还有无数来自商业机构和开源社区的第三方类库来帮助它实现各种各样的功能
5、它与身俱来对分布式技术的支持就比较完善
JDK和JRE
1、JDK(Java Development Kit),是用于支持Java程序开发的最小环境,基本上Java程序设计语言、Java虚拟机、Java API类库这三部分组成了JDK
2、JRE(Java Runtime Enviroment),是支持Java程序运行的标准环境,Java API类库中的Java SE API和Java虚拟机这两部分组成了JRE
OpenJDK
其实JDK在一开始并不是开源的,但是随着开源运动的蓬勃发展,2006年Sun公司宣布将对Java开放源代码,开源的Java平台开发主要集中在OpenJDK项目上。2009年4月15日,Sun公司正式发布OpenJDK,JDK 7则是Java开源后发布的第一个版本,任何组织和个人都可以为Java的发展做出贡献。
Java虚拟机
为什么Java可以实现所谓的“一次编写,到处运行”,主要是因为虚拟机的存在。Java虚拟机负责Java程序设计语言的安全特性和平台无关性。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java语言编译器只需要生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改地运行。Java虚拟机使得Java摆脱了具体机器的束缚,使跨越不同平台编写程序成为了可能。要多提一句,我们现在说的Java虚拟机基本上都是JDK自带的虚拟机HotSpot,这款虚拟机也是目前商用虚拟中市场份额最大的一款虚拟机,可以通过在命令行程序中输入“java -version”来查看:
其实市面上还有很多别的优秀的虚拟机。Sun公司除了有大名鼎鼎的HotSpot外,还有KVM、Squawk VM、Maxine VM,BEA公司有JRockit VM、IBM公司有J9 VM等等。