当前位置: 首页 > 后端技术 > Java

一篇了解Java语言与Java生态系统关系的文章

时间:2023-04-01 20:01:14 Java

[toc]Java语言与Java生态系统的关系OracleJDK和OpenJDK在2009年Oracle收购SUN之前,收购后命名为OracleJDK.事实上,OracleJDK是基于OpenJDK源代码构建的。OpenJDKOpenJDK是JavaSE的开源实现。它得到SUN和Java社区的支持。2009年,甲骨文收购了Sun。此后,Java的维护者之一SUN也成为了Oracle。大多数JDK都是在OpenJDK的基础上编写和实现的。几乎所有现有的JDK都源自OpenJDK。它们之间的区别在于许可证。两者的区别说得再粗一点,OpenJDK是开源的,OracleJDK是官方的JDK和JRE,而JVMJDK  JDK是Java开发包,是SunMicrosystems为Java开发者提供的产品。  JDK包含JRE。JDK安装目录下有一个名为jre的目录,里面有bin和lib两个文件夹。这里,可以认为bin里的就是jvm,而lib里的是jvm工作所需要的。这个类库,和jvm和lib一起叫做jre。  JDK是整个JAVA的核心,包括Java运行环境JRE(JavaRuntimeEnvironment),一堆Java工具(javac/java/jdb等)和基于Java的类库(即JavaAPI包括rt.jar)。  ①SE(J2SE),standardedition,标准版,是我们平时使用的一个版本,从JDK5.0开始,更名为JavaSE。  ②EE(J2EE),企业版,企业版,使用这个JDK开发J2EE应用,从JDK5.0开始,更名为JavaEE。  ③ME(J2ME),微型版,主要用于移动设备和嵌入式设备上的java应用。从JDK5.0开始,更名为JavaME。JRE  是运行Java语言编写的程序不可或缺的运行环境。也正是通过它,Java开发者可以将自己开发的程序发布给用户使用。  JRE包括Java虚拟机(JVM)、运行时类库和Java应用程序启动器,它们是运行Java程序的必要组件。  与大家熟知的JDK不同,JRE是Java运行环境,不是开发环境,因此不包含任何开发工具(编译器、调试器等),只针对使用Java程序的用户。JVM 就是我们常说的java虚拟机。它是整个java跨平台实现的核心部分。所有的java程序都会先被编译成.class类文件,在虚拟机上才能执行。.  也就是说类不直接对应机器的操作系统,而是通过虚拟机间接与操作系统交互,虚拟机将程序解释到本地系统执行。  只有JVM不能执行类,因为在解释类时,JVM需要调用解释所需要的类库lib,而jre中包含了lib类库。  JVM屏蔽了特定操作系统平台的相关信息,使得Java程序只需要生成运行在Java虚拟机上的目标代码(字节码),就可以在各种平台上不加修改地运行。如何理解Java是一种“一次编写,随处运行”的跨平台语言。一次编写,导出并运行!当Java源代码成功编译成字节码后,如果要在不同的平台上运行,不用重新编译的优势就不再那么吸引人了。Python、PHP、Perl、Ruby、Lisp等都有强大的解释器,跨平台似乎几乎成了一门语言必备的特性。如何理解JVM是跨语言平台?Java虚拟机并不关心它内部运行的程序是用什么编程语言编写的,它只关心“字节码”文件。Java不是最强大的语言,但JVM是最强大的虚拟机。Java的发展历史2000年,JDK1.3发布,JavaHotSpot虚拟机正式发布,成为Java的默认虚拟机。2002年,JDK1.4发布,古老的Classic虚拟机退出了历史舞台。2003年底,Java平台上的Scala正式发布,同年Groovy也加入了Java阵营。2006年,JDK6发布。同年Java开源,OpenJDK成立。自然而然,Hotspot虚拟机也成为了OpenJDK中的默认虚拟机。2007年,Java平台迎来了一个新的伙伴,Clojure。2008年,甲骨文收购了BEA,得到了JRockit虚拟机。2009年,Twitter宣布将大部分后台程序从Ruby迁移到Java平台的另一个大型应用程序Scala。2010年甲骨文收购Sun,获得了Java商标和最有价值的HotSpot虚拟机。此时甲骨文拥有市场占有率最高的两款虚拟机HotSpot和JRockit,并计划在未来将其整合:HotRockit。JCP组织管理:Java语言2011年,JDK7发布。在JDK1.7u4中,新的垃圾收集器G1正式启用。2017年,JDK9发布。将G1设置为默认GC,替换CMS(标记为已弃用)。同年IBM的J9开源,形成了现在的OpenJ9社区。2018年,安卓Java侵权案宣判,谷歌共赔偿甲骨文88亿美元。同年发布JDK11,LTS版JDK,发布革命性的ZGC,2019年调整JDK许可证,发布JDK12,加入RedHat主导的ShenandoahGC,开发通用的JVMSunClassicVM-->解读ExactVM-->Solaris*SUN的HotSpotVM**BEA的JRockit-->不包括解释器、服务器端、JMC*IBM的J9KVM和CDC/CLDCHotspotAzulVMLiquidVMApacheHarmonyMicrosoftJVMTaobaoJVMDalvikVMGraalVM-->2018,"RunProgramsFasterAnywhere"其他JVM:VM、SquawkVM、JavaInJava、MaxineVM、JikesRVM、IKVM.NET、JamVM、CacaoVM、SableVM、Kaffe、JelatineJVM、NanoVM、MRP、MoxieJVM的JavaCard生命周期?虚拟机的启动Java虚拟机的启动是通过引导类加载器创建一个初始类(initialclass)来完成的,由虚拟机的具体实现来指定。虚拟机的退出有以下几种情况:某个线程调用了Runtime类或System类的exit方法,或者Runtime类的halt方法,Java安全管理器也允许这种exit或halt操作。程序正常结束。程序在执行过程中遇到异常或错误,异常终止。Java虚拟机进程因操作系统错误而终止。它不一定要求面试官知道一切。但是如果你明白了其中的原理,那绝对会成为面试的加分项。谈谈Java虚拟机(阿里)的生命周期,关注HotSpot?·SUN的JDK版本从1.3.1开始使用HotSpot虚拟机,2006年底开源,主要用C++实现,JNI接口部分用C实现。·HotSpot是较新的Java虚拟机,使用JIT(JustinTime)编译器,可以大大提高Java运行的性能。·Java最初是将源代码编译成字节码,在虚拟机上执行,所以执行速度较慢。但是,HotSpot将一些常用的代码编译成本地(native,native)的代码,从而显着提高了性能。·HotSpotJVM参数可分为标准选项和非标准选项。规则参数比较稳定,在以后的JDK版本中不会有太大变化。非常规参数可能会因JDK升级而改变。连续三个码字好不容易求点赞收藏~