.net clr vs java虚拟机_解读经典《C#高级编程》 .Net体系结构 页1-6.章1

123381930b097eef30a6b578f167ad92.png

前言

大家好。这是本号推送的第一篇文章,讲的是“解读经典系列”解读的是《C#高级编程》,可以说,我从C#入门到精通,就靠这么一本书,反复的多次看,每次看都有更深入的理解,真的是一本非常经典的好书。特分享给大家。

我会把我读书的过程和理解记录和分享出来,形成连载文章。大家可以连续阅读。

01

.Net和Java的对比

.Net在Java之后诞生,因此吸收了很多Java的成功经验。同时,.Net和Java一样都是基于虚拟机,能实现跨平台(当然.Net原先只是理论上的跨平台,直到后来有了Mono,最近几年微软了有自己的.Net Core)。如果将.Net和Java做个对比,它们之间大致可以按如下的等同理解:

1).Net的公共语言运行库(CLR)等同Java的虚拟机JVM。前者将高级语言编译成中间语言(IL),后者将Java语言编译成字节码(Bytecode)。

2).NetFramework等同JDK。也就是开发工具类库。

3)Java还有其他众多概念,比如JRE(Java Runtime Environment),JavaSE,JavaEE,JavaME等,对应各自不同的安装包。.Net相应比较少有对标概念。从这里可以体现出Java设计者和.Net设计者的风格区别。在我看来Java从语言到框架都想要有一种“范儿”,爱讲标准、模式,曾经很流行的所谓“21种设计模式”就来源于Java社区,有.Net开发者抄了不少,我是觉得并无必要,害处更大。而.Net的风格或者说微软的风格是简单高效,不讲范儿讲效率。.Net使用一个.Net Framework囊括了所有,配合其最优秀的开发工具VisualStudio(后面简称VS),使入门简单了很多。

02

C#和.Net的关系

.Net全称.NetFramework,它是一个框架,而C#是一门语言,基于.Net运行,基于.Net运行的语言还有http://VB.Net,VC++.Net等。

03

公用语言运行库(CLR)

CLR是.NetFramework的核心部分。从字面上很好理解,即其运行的是公共语言(也就是中间语言IL)。比如对于C#语言,需要先通过C#编译器(csc.exe)编译成中间语言,然后通过CLR将IL编译成不同操作系统平台的机器代码。这就是所谓的两阶段编译。因此,和JVM一样,CLR能提供平台无关性。

中间语言总是即时编译的(JIT编译),所谓JIT编译,就是某段IL被调用时,就会被立即编译成本地机器代码,之后就不再重新编译。这引发了.Net和Java谁更快的论战,我觉得这种论战意义不大。Java现在也已经引入了JIT编译机制。

JIT编译器还带来了一个性能福利,因为JIT编译器可以针对当前运行的处理器的特性进行针对性的编译优化,这是相对于C++等静态编译语言的优势。

CLR还提供了一个特性,即多语言的互操作性,比如C#和http://VB.Net,VC++.Net的互操作性。这是JVM所没有的,也体现了.Net的强大之处。同时.Net也对传统的COM提供了支持(通过包装器wrapper),从而能够实现和其他语言比如Delphi的互操作。

而多语言互操作性造就了一个比Java字节码还强大的中间语言。

请看下回分解。

觉得文章有意义的话,请动动手指,分享给朋友一起来共同学习。

也欢迎关注本人公众号 “产品技术知与行” ,除了分享以上技术文章,还致力于打造辅助开发的结构化知识库,包括原创文章、免费课程(C#,Java,Js)、技术专题、视野知识、源码下载等内容。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值