.NET和JAVA的比较- 体系结构
.NET体系结构
对于.NET Framework体系结构,参考了"你必须知道的.NET"并”借用“别人的经典体系结构图从宏观上说明一下我的理解。

图1
简单的说下几个名词:
- CLR: 通用语言运行平台(Common Language Runtime),是.NET框架的核心,与Java界的JVM类似。是代码执行的大管家,提供CTS和基础服务。
- FCL: 类库(Framework Class Library),如图所示提供了很多的标准类型,方便程序设计人员,完成了程序设计基础性工作,作为初学者要知道怎么用这些类库。类库的根就是System。
- BCL: 基类库Base Class Library,作为FCL的基类库,IO、String、NET等等必须熟练的掌握。
- CLS: 公共语言规范Common Language Specification,是.NET开发语言必须遵守的规范的最小集合。
- CTS: 公共类型系统Common Type System,解决各个语言类型定义的不一致问题,成为了.NET体系中跨语言编程的规范,.NET所有语言都用这一个类型系统。
上图中CTS和CLS构成了通用语言基础架构CLI(Common Language Infrastructure)的一部分,CLI还包含CIL(常称为MSIL),CIL就是我们常说的IL代码,是所有的.NET语言编程生成的中间代码,其实就像汇编语言一样的中间代码,只不过IL是处于.NET和汇编语言之间的语言。这一点和Java中的字节码(Bytecode)类似,以后的文章会讲解它们的区别。
CLI、CTS、CLS和CIL的关系可以用下图来表示:

图2
具体开发运用程序时如下图:

图3
JAVA技术体系
说下我找到的JAVA相关的资料,JAVA只是粗浅的了解一些。有的可能说的不准确,希望错误的地方大家指出,对于JAVA来说就没有这么“庞大”了,毕竟JVM中只运行JAVA一种语言。
Sun官方所定义的Java技术体系包含Java程序设计语言、各种硬件平台上的Java虚拟机、Class文件格式、JavaAPI类库、来自商业机构和开源社区的第三方Java类库。
我们可以把Java程序设计语言、Java虚拟机、JavaAPI类库这三部分统称为JDK。(JavaDevelopmentKit),JDK是用于支持Java开发的最小环境。可以把JavaAPI类库中的Java SE API子集和Java虚拟机这两部分统称为JRE(Java Runtime Environment),JRE是支持Java程序运行的标准环境。图4展示了Java技术体系所包括的内容,以及JDK和JRE所涵盖的范围。

图4
JAVA中的很多名词不是很了解,先贴几个:
- JPDA:Java平台的调试架构
- JavaFx:作为一个富客户端平台的下一步演进。它的目的是为企业业务应用提供一个轻量级的,硬件加速的Java UI平台。
- Swing: 所谓的Lightweight组件,不是通过native方法来实现的,所以Swing的窗口风格更多样化。但是,Swing里面也有heavyweight组件。比如JWindow,Dialog,JFrame
- 同时,由于AWT是通过操作系统实现的,所以AWT的组件只能采取各个操作系统的交集,组建数量少,功能少。而Swing则不依赖于操作系统,所以组件多,功能强。
- AWT: 是通过调用操作系统的native方法实现的,所以在Windows系统上的AWT窗口就是Windows的风格,而在Unix系统上的则是XWindow风格。
同样JAVA的实现如图5

图5
图4是根据组成部分的功能划分的,按照技术所服务领域划分, Java技术体系可以分为四个平台,分别为:
- JavaCard:支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。
- JavaME(MicroEdition):支持Java程序运行在移动终端(手机、PDA)上的平台,对JavaAPI有所精简,并加入了针对移动终端的支持,这个版本以前称为J2ME。
- JavaSE(StandardEdition):支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,这个版本以前称为J2SE。
- JavaEE(EnterpriseEdition):支持使用多层架构的企业应用(如ERP、CRM应用)的Java平台,除了提供JavaSEAPI外,还对其做了大量的扩充并提供了相关的部署支持,这个版本以前称为J2EE。
目前作为Andriod基本取代了JavaME成为了移动领域开发的热点。JAVA体系相比.NET只多不少,不是一张图就能展示完的。本来想找个完整图展示所有的JAVA技术体系,可惜没有找到。
接下来说下我理解的.NET(C#)和JAVA的相关技术对应关系。有错请指出啊~~
|
.NET(C#) |
JAVA |
|
WPF/WinForm |
Swing等/AWT |
|
ASP.NET |
JSP、Servlet |
|
EntityFramework/NHibernate/ibatis.net |
Hibernate/ibatis |
|
Spring.NET |
Spring |
|
MVC |
Strusts |
|
Windows Mobile/Windows Phone |
Java ME/Andriod |
|
WCF/WebService |
WebService |
|
WF(Work Flow)- |
JBPM |
表1
今天的讲解就到此,谢谢您的阅读,下次再见。 如果您觉得这篇博客对您有所启发,不妨点击一下右下角的【推荐】按钮。 如果您对本博客内容感兴趣,请继续关注我,我是Bull Li。
.NET和JAVA的比较- 体系结构的更多相关文章
- java.IO层次体系结构
在整个Java.io包中最重要的就是5个类和一个接口.5个类指的是File.OutputStream.InputStream.Writer.Reader:一个接口指的是Serializable.掌握了 ...
- Java虚拟机学习 - 体系结构 内存模型
一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代” .“非堆”, 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB,最 ...
- Java虚拟机学习 - 体系结构 内存模型(1)
一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆", 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内 ...
- Java的技术体系结构
作为程序开发者,我们都想写出完美的代码,但世界上好像从来都没有过完美的代码,因为代码牵涉的内容很复杂,有程序设计语言.运行环境.数据结构以及算法等等,而开发者往往很难全面精通,再者写代码本来也就是一个 ...
- Java虚拟机学习 - 体系结构 内存模型(转载)
一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代” .“非堆”, 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB, ...
- Java 之 Servlet 体系结构
Servlet 的体系结构 体系结构示意图: 1.Servlet 接口 如果直接实现这个接口,需要重写里面所有的方法,但是只需要使用 service() 方法,其他的不常用. 2.GenericSer ...
- java 类加载器体系结构
- java jvm学习笔记二(类装载器的体系结构)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱,什 ...
- 《深入Java虚拟机学习笔记》- 第1章 Java体系结构
一.体系结构组成 当编写并运行一个Java程序时,就同时体验了这四种技术.用Java语言编写源代码,编译成Java Class文件,然后再在Java虚拟机上运行class文件.当编写程序时,通过调用类 ...
随机推荐
- S关于使用QL声明 找出同时满足多个tag拍摄条件设置算法
表结构 Tag Table:{tag_id, tag_name} #标签表 News Table:{news_id, title,......} #新闻列表 NewsTags Table:{tag ...
- 在win8.1 64位系统+cocos2d-x2.2.3下搭建android交叉编译环境
搭建前须要下载的软件包(默认已搭建好cocos2d-x而且可在VS上执行,本人VS版本号为2013): 1:java 下载地址:http://www.java.com/zh_CN/download/m ...
- RMQ(模板 ST 区间最值,频繁的间隔时间)
PS: 介绍:http://blog.csdn.net/liang5630/article/details/7917702 RMQ算法.是一个高速求区间最值的离线算法,预处理时间复杂度O(n*log( ...
- DWR入门的例子(一个)
DWR(Direct Web Remoting)是WEB远程调用框架.使用这种框架使AJAX发展至今已成为非常easy.使用DWR能client利用JavaScript直接调用服务端的Java方法并返 ...
- BZOJ 1015 JSOI2008 星球大战 starwar 并检查集合
标题效果:给定一个无向图.联通谋求块的数目,以及k一个点的破坏后每次:联通,块的数目 侧面和摧毁的地步全记录,我们可以做相反的. 需要注意的是该点不能算作破坏联通块 #include<cstdi ...
- mysql 在创建批处理脚本日志表信息
mysql在批处理脚本通过存储过程如下所示创建日志信息表: drop PROCEDURE if EXISTS reqSp; DELIMITER // create procedure reqSp(sT ...
- ViewPager用法
第一图: 页面中填充内容是随机关键词飞入和飞出动画效果,随后会更新,如今请先无视吧 ---2015-02-27--- 两年后最终更新了,网上都能搜到的,哎 无奈太懒http://bl ...
- ABP领域层——领域事件(Domain events)
ABP领域层——领域事件(Domain events) 基于DDD的现代ASP.NET开发框架--ABP系列之14.ABP领域层——领域事件(Domain events) ABP是“ASP.NET B ...
- MOCK.JS 生成随机数据,拦截 Ajax 请求
mock.js 的用处 前后端分离 :让前端攻城师独立于后端进行开发. 增加单元测试的真实性 :通过随机数据,模拟各种场景. 开发无侵入 :不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响 ...
- jsScript中的一些操作方法
1.采用dom方式对script标签进行操作 var h = document.getElementsByTagName('HEAD').item(0); var s = document.creat ...