各种公司的各种虚拟机的概览:
1、Sun Classic / Exact VM
2、Sun HotSpot VM
3、Sun Mobile-Embedded VM / Meta-Circular VM
4、BEA JRockit / IBM J9 VM
5、Azul VM / BEA Liquid VM
6、Apache Harmony / Google Android Dalvik VM
7、Mocrosoft JVM 及其他
问题1:Java SE和Java EE有什么不同?
JavaEE:Java Enterprise Edition,Java企业版,多用于企业级开发,包括web开发等等。企业版本帮助开发和部署可移植、健壮、可伸缩切安全的服务端Java应用。Java EE是在JavaSE的基础上构建的他提供Web 服务、组建模型、管理和通信API.可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和web2.0应用程序。
JavaSE:通常是指Java Standard Edition,Java标准版,就是一般Java程序的开发就可以(如桌面程序),可以看作是JavaEE的子集。它允许开发和部署在桌面、服务器、嵌入式环境和实施环境中使用的Java应用程序。JavaSE 包括支持Java Web服务开发的类,并为Java Platform,Enterprise Edition(Java EE)提供基础。
简单来说 JAVA EE 比 JAVA SE 多了几个jar包, 别的没啥明显区别
用于提供企业级开发的支持(包括但不限于对ejb,jsp,xml,servlet等)
以前呢, 是没有JAVA EE SDK的 都是下载JAVA SE SDK 也就是通常说的JDK, 但是也可以用来开发J2EE项目,开发的时候把tomcat、jboss等web容器的J2EE支持包导进来就可以了
现在oracle网站上出现了JAVA EE SDK 没用过 猜测是自己按照J2EE的规范 把上述支持的类库包装进去了,因为oracle自己出了web容器, 然并卵,如果你用tomcat开发, 还是得用tomcat提供的servlet-api.jar 。。。
不然可能有兼容性问题。
问题2:open JDK和oracle JDK有什么不同?
Oracle JDK采用了商业实现,而OpenJDK使用的是开源的FreeType。当然,“相同”是建立在两者共有的组件基础上的,Oracle JDK中还会存在一些Open JDK没有的、商用闭源的功能,例如从JRockit移植改造而来的Java Flight Recorder。预计以后JRockit的MissionControl移植到HotSpot之后,也会以Oracle JDK专有、闭源的形式提供。
Oracle的项目发布经理Joe Darcy在OSCON 2011上对两者关系的介绍也证实了OpenJDK 7和Oracle JDK 7在程序上是非常接近的,两者共用了大量相同的代码(如下图,注意图中提示了两者共同代码的占比要远高于图形上看到的比例),所以我们编译的OpenJDK,基本上可以认为性能、功能和执行逻辑上都和官方的Oracle JDK是一致的。
展望Java技术的未来
1、模块化。如OSGI技术。
2、混合语言。即每个应用层可以采用不同的编程语言。如展示层使用JRuby/Rails,中间层使用的是Java。接口对每一层的开发者都是透明的,各种语言之间的交互不存在任何困难,就像使用自己的语言的源生API一样方便,因为它们最终都运行在一个虚拟机之上。
3、多核并行。如JDK1.5就引入java.util.concurrent包实现了一个粗粒度的并发框架。而JDK 1.7中加入的java.util.concurrent.forkjoin包是对这个框架的一次重要补充。Fork/Join模式是处理并行编程的一个经典方法,能够轻松的利用多个CPU核心提供的计算资源来写作完成一个复杂的计算任务。通过Fork/Join模式,我们能够更加顺畅地过渡到多核时代。JDK外围,也出现了专门满足并行计算需求的计算框架,如Apache的Hadoop Map/Reduce,这个是一个简单易懂的并行框架,能够运行在上千个商用机器组成的大型集群上,并且能够以一种可靠的容错方式并行处理TB级别的数据集。
4、进一步丰富语法。如自动装箱,泛型,动态注解,枚举,可变长参数,遍历循环,Lambda语法等。
5、64位虚拟机。由于指针膨胀和各种数据类型对齐补白的原因,运行于64位系统上的Java应用需要消耗更多的内存,通常要比32位系统额外增加10% ~ 30%的内存消耗;其次,多个机构的测试结果显示,64位虚拟机的运行速度在各个测试项中几乎全面落后于32位虚拟机,两者大概有15%左右的性能差距。所有接下来会对这个情况做进一步的改善。
6、编译自己的JDK。想要一探JDK内部的实现机制,最编辑的路径之一就是自己编译一套JDK,通过阅读和跟踪调试JDK源码去了解Java技术体系的原理。如openJDK。阅读JDK源码或者HotSpot源码。