文章目录

.NET与JAVA平台两者都是当前主流一站式的软件开发平台(Platforms),即都提供了语言(Language)、类库(Libraries)、运行时(Runtime)等相关东西。从两个平台的体系结构我们可以看到各自的对应物。

比较对象 .Net JAVA 备注
语言 C#、VB、C++、F# JAVA 只列出平台原生态支持的语言。其他基于IL或ByteCode语言不计在内
类库 FCL JDK类库 两者都提供了相当数量的自定义类型库,但是JAVA平台分为三部分(JAVASE、JAVAEE、JAVAME)每个部分提供的类库是不同(除基本的类库存外)、这是因为他们服务的领域不同。但是.NET的FCL则是一起提供了。
运行时 CLR JVM 很多会认为应该是JRE与CLR是个差不多的东西,其实不是这样的。请看CLRJRE的结构图。一台机器上可以安装很多个JRE不管版本是否相同,但是同一版的.netFramework只能安装一个。
中间代码 IL字节码 ByteCode
打包与部署 程序集(assembly) Jar,ear,war .net中的程序集与jar是不同的,jar只个压缩文件,他是把编译后的字节码文件(.class)放在一个压缩包里。程序集则包含了托管模块(元数据、二进制中间代码)与资源集合,它有版本管理。可以防止dll hell问题。Jar则没这些功能。

相关概念解析:

  • .Net Framework其实由三大部分组成:语言(C#等)、FCL(框架类型库)、CLR;
  • JDK也由三大部分组成:语言(JAVA)、类型库、JVM,其中类型库与JVM合称JRE。
  • CLR与CLI有什么关系:CLI(Common Language infrastructure)公共语言基础结构,它是一个规范(Specification),它定义托管代码的执行环境。这其中就包括四大部分:CTS(公共类型系统)、Metadata(元数据)、CLS(公共语言规范)、VES(虚拟执行系统)。其实,我们可以简单的把它比喻为面向对象编程中的接口。而CLR就是他的一个具体实现,当然除了MS的CLR还有其它第三方的,像Mono Runtime也其中的一个具体实现。JAVA平台也是如此设计的,JVM[1]及JAVASE(openJDK,OracleJDK)、JAVAEE(Tomcat部分实现、Resin,Glassfish,JbossAS,Weblogic)等类库都先定义规范,然后由不同的厂商或组织去实现,我个人认为应该是.Net平台借鉴了JAVA平台的设计思想,但是在具体细节及实现上看到了JAVA平台一些不足之处(如程序集版本管理,应用程序域、异常处理机制等,进行改进。
  • 同一台机器可以安装多个版本JRE,为什么.Net framework同一台机器相同版本只能安装一个?有何优缺点? 主要还是因为java与.net平台类库的版本管理机制的问题。java的简单,灵活。.net的复杂、统一。 同时在.net中有个重要的功能是:CLR可以寄宿在windows中任何应用程序进程。
文章目录