社区
.NET Framework
帖子详情
.net是不是用的虚拟机技术?
ztenv
博客专家认证
2008-05-27 10:42:34
最近看到两个对立的观点:
1 认为.net是使用的虚拟机技术,因为由其它语言编译生成中间代码,解释执行,等等.
2 认为.net与java截然不同,不是使用的虚拟机技术,说MS文档早已写明,其实.net运行速度和开发速度已经算是很快了(与C++等相比),之所以感觉慢是因为.net采用了很多出错处理机制和进行了大量的封装.
请各位高手讨论一下吧,谢谢!!
...全文
1127
31
打赏
收藏
.net是不是用的虚拟机技术?
最近看到两个对立的观点: 1 认为.net是使用的虚拟机技术,因为由其它语言编译生成中间代码,解释执行,等等. 2 认为.net与java截然不同,不是使用的虚拟机技术,说MS文档早已写明,其实.net运行速度和开发速度已经算是很快了(与C++等相比),之所以感觉慢是因为.net采用了很多出错处理机制和进行了大量的封装. 请各位高手讨论一下吧,谢谢!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
31 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zzlfe
2009-06-13
打赏
举报
回复
[Quote=引用 26 楼 heguo 的回复:]
这么基础的东西本不想参与讨论的,看到有这么多人在那里"猜测",有必要以正视听.
我也不想去找官方文档,只是在这里给那些一知半解的同仁提个醒:
C#编译成即时解释代码,虚拟机载入运行时,会再一次编译成可执行代码.
至于是不是每次都编译,全部编译还是部分编译,编译后放在内存中还是存在磁盘文件里,在载入后立即编译还是边执行边编译,
这是.NET虚拟机为优化性能选择的方案,与程序员无关,微软认为这是和Java虚拟机最大的区别,…
[/Quote]
大拇指
cppfaq
2009-04-01
打赏
举报
回复
[Quote=引用 9 楼 vrhero 的回复:]
如果稍微对计算机和OS多些了解...就不会有这种问题...
虚拟机是个泛称...首先虚拟机是一种软件...其特征是在计算机硬件层之上的软件抽象层...也就是说它应该是和硬件层无关的...
按照抽象程度的不同一般把虚拟机分为五种...
1.指令集结构层
2.硬件抽象层
3.操作系统层
4.应用层
5.库层
其中硬件抽象层虚拟机和应用层虚拟机是最常见的...著名的VMware和Virtual PC就是硬件抽象层虚拟机...
很明显也是公…
[/Quote]
经典......
WJFSANHE
2008-08-01
打赏
举报
回复
上面的讨论各有各的说法,甚至歪解,提供一个链接,去看看权威的解释吧http://en.wikipedia.org/wiki/Common_Language_Runtime
ztenv
2008-06-10
打赏
举报
回复
看了楼上各位的讨论,貌似明白一些了,谢谢!!!!!!
heguo
2008-06-09
打赏
举报
回复
这么基础的东西本不想参与讨论的,看到有这么多人在那里"猜测",有必要以正视听.
我也不想去找官方文档,只是在这里给那些一知半解的同仁提个醒:
C#编译成即时解释代码,虚拟机载入运行时,会再一次编译成可执行代码.
至于是不是每次都编译,全部编译还是部分编译,编译后放在内存中还是存在磁盘文件里,在载入后立即编译还是边执行边编译,
这是.NET虚拟机为优化性能选择的方案,与程序员无关,微软认为这是和Java虚拟机最大的区别,因为.Net有二次编译过程。
kiraqian
2008-06-09
打赏
举报
回复
.Net Framework技术是一个借鉴了Java成功跨平台经验而研发出的改良的产品,C#语言是微软新研发出来用于.Net平台的高效开发语言。Java虚拟机仅仅是用来解释执行Java开发的应用程序的,而.Net不是,.Net里的CLS和CTS是一种通用语言规范和通用类型系统,通过了欧洲计算机语言规范标准,是一个真正做到可兼容多语言的框架体系。
.Net Framework中的CLR是类似Java虚拟机的功能,把中间代码翻译成本地CPU指令的一种解释器和执行器。但和Java不同的是Java虚拟机更偏重于解释,而.Net有良好的预编译机制,所以运行.Net程序速度和普通C++编写的程序差不多快。
第一次启动.Net程序时速度会相应较慢,而第二次启动就明显很快就是因为.Net中间代码被编译成本地CPU指令并执行后没有及时删除,而是有缓存机制。
对于在.Net平台上开发的程序中创建的类有GC机制控制内存的释放,该机制的算法基本是递归遍历资源释放,但回收周期仍旧不明确的。
radarhp
2008-06-08
打赏
举报
回复
最简单的道理就是真正编译型的语言灭有见过可以反编译到源代码的(先不讨论是否具备很好的可读性)
PB,java都是电信的虚拟机技术的语言(解释型的)所以反编译得很轻松
vc6,delphi这些写出来的东西见过反编译到源代码的吗?
.NET的东西为什么要模糊,因为Reflector的存在……
既然这样子的话,.NET的最多无非就是解释型的一个变种
个人的点滴认识,欢迎大虾斧正……
zhujiechang
2008-06-08
打赏
举报
回复
对,.net存在着大量的数据校验,所以相对系统是安全些。
.net是慢得可以,各方面都慢,因为是中间语言,所以要编译,一般情况下像VC写的,
早运行n遍了,.net还在编译中,:),虽然是方法编译,但是大量的这样编译其实也大大影响性能。
.net其实属于虚拟机技术,ms当然不希望同java比,就像.net能用mono一样,可以运行在Linux上
wwmtv
2008-06-08
打赏
举报
回复
继续关注
怫悰
2008-06-07
打赏
举报
回复
每天回帖
怫悰
2008-06-07
打赏
举报
回复
每天在回帖灌水园回帖能不能的分呀?
somple
2008-06-07
打赏
举报
回复
继续关注
yanmo7
2008-06-06
打赏
举报
回复
[Quote=引用 18 楼 zhouhongyun 的回复:]
因此,第一次启动的.net程序通常是很慢的,而之后启动就没有这么慢了。
------是吗?第一次启动任何程序,在间隔比较短的情况下,再启动第二次,都会比第二次快,这跟是不是.net程序无关,这是由windows的缓存管理特性决定的,如果两次启动的时间相隔比较长,那么第二次启动所需时间仍然很长。 .net即时编译的本地代码只在本次运行期内有效,程序退出就失效。
[/Quote]
两次启动间隔时间长第二次启动所需时间仍然很长是应为系统要加在应用程序文件,而dotnet编译的文件体积都很小,因此一般不存在长时间加载应用程序文件的问题,1M体积的C++文件和100K体积的C#文件加载时间都长是因为C#文件要加载.NET去解释IL。
粉红色的火烈鸟
2008-06-05
打赏
举报
回复
因此,第一次启动的.net程序通常是很慢的,而之后启动就没有这么慢了。
------是吗?第一次启动任何程序,在间隔比较短的情况下,再启动第二次,都会比第二次快,这跟是不是.net程序无关,这是由windows的缓存管理特性决定的,如果两次启动的时间相隔比较长,那么第二次启动所需时间仍然很长。 .net即时编译的本地代码只在本次运行期内有效,程序退出就失效。
JackLucifer
2008-06-03
打赏
举报
回复
[Quote=引用 6 楼 liu_binq63 的回复:]
dotnet不是虚拟机。
我们写的源代码被编译后生成的exe文件不是真正的机器码,而是称为IL的中间语言。
然后在这个exe文件执行的时候,才被clr动态编译成可执行的机器码文件。
[/Quote]
是的,如果我没有记错的话,的确是说程序完成后先编译为IL的,然后在某台电脑上第一次运行时再编译为本地代码。因此,第一次启动的.net程序通常是很慢的,而之后启动就没有这么慢了。
win7cc
2008-06-02
打赏
举报
回复
不是吧 。NET是包含很多类 而JAVA虚拟机不是吧?
huyongzs
2008-05-30
打赏
举报
回复
微软当然希望大家认为dotnet用的是一种全新的技术。所以含糊其辞。
而实际上dotnet和java虚拟机技术很像,但是一个很大的差别就是dotnet运行时靠把中间态文件即时编译
粉红色的火烈鸟
2008-05-30
打赏
举报
回复
微软换了名字,就把一帮傻蛋 唬得晕头转向。
.net的追随者总是这么半桶水
AechoJohn
2008-05-30
打赏
举报
回复
学习vrhero。
还想懒够
2008-05-30
打赏
举报
回复
[Quote=引用 4 楼 zanfeng 的回复:]
很早的MS的开发文档说明。和JAVA的明显区别在于。一个是采用虚拟机一个是编译是不一样的。
JAVA听说很容易被反编译出源码。因为是解释性语言。而。NET是编译型语言。
[/Quote]
.NET也是一种解释性语言,不管是VB.NET还是C#,编译后形成IL,再由.NET Framework去解释的
基本上认为.NET是使用的虚拟机技术
加载更多回复(11)
.NET
——Windows DNA的新发展
.NET
技术
的实质是建构在
.NET
CLR和Assembly(配件)
技术
上,可以方便地在Internet上使用的新的Windows DNA结构。
.NET
CLR的实质是
.NET
虚拟机
,用于执行MSIL(Microsoft中间语言)代码,也就是
.NET
虚拟机
代码。 Assembly(暂时译作配件,以与COM组件相对应)的实质是COM+ 2.0(该
技术
目前微软官方文件未公开,实际上它是
.NET
的真正核心
技术
之一)组件的一种形式,传统的COM组件和Assembly都是COM+ 2.0组件的一种形式。
初级程序员笔试题.docx
什么是
.NET
?什么是CLI?什么是CLR?IL是什么?
.NET
是微软的新一代
技术
平台,为敏捷商务构建互联互通的应用系统,这些系统是基于标准的、联通的、适应变化的、稳定的和高性能的。从
技术
的角度,一个
.NET
应用是一个运行于
.NET
Framework之上的应用程序。 CLR(公用语言运行时)和Java
虚拟机
一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。 通用语言基础结构(Common Language Infrastructure,CLI)是CLR的一个子集,也就是
.NET
中最终对编译成MSIL代码的应用程序的运行环境进行管理的那一部分。
一学就会——电脑安装linux
虚拟机
在Linux环境下学习编程开发,运维管理,都需要用到Linux系统。可以安装Linux、Windows双系统,也可以将电脑重装为Linux系统,最简单的方法就是安装一个Linux
虚拟机
。用的时候打开
虚拟机
,不用的时候关闭
虚拟机
。跟QQ一样,用的时候开启QQ,不用就关掉QQ。不会装Linux
虚拟机
?没关系,本课程详细介绍了如何Windows 10安装Linux
虚拟机
。其他的Windows 8, Windows 7也是一样的,都可以安装。
系统运行库组件_
.NET
6.0.6_离线安装包
.NET
6即Microsoft
.NET
Runtime 6.0,
.NET
6是微软最新推出的NET框架运行库,是Windows操作系统用于
.NET
Framework构建的应用程序所需的基础类型库组件。NET Runtime(Net运行库)是继Windows DNA之后的一个全新软件开发平台,
.NET
框架是采用系统
虚拟机
运行的编程平台,以通用语言运行库为基础,支持多国语言的开发环境。 NET 6软件介绍 作为LTS的长期支持版本,
.NET
6将获得3年的
技术
支持。 NET6开发周期内,总共约有1万个commit,下面简单介绍一下新版本的亮点变化。
.NET
6亮点。 使用Microsoft服务.其他公司运行的云应用程序和开源项目测试了生产压力。 为LTS版本提供三年的最新长期支持
技术
支持。 跨浏览器.云.桌面.IoT和移动应用程序的统一平台,都使用相同的
.NET
库,可以方便地共享代码。 全面提高性能,特别是文件I/O性能,减少执行时间.等待时间和内存使用。
最新java反编译工具
大家都知道,将源代码转换成二进制执行代码的过程叫“编译”,比如将C源代码编译成exe可执行文件;那么把二进制执行代码的过程就叫“反编译”,比如把exe转换为C源代码就叫“反编译”。 由于主流的C的编译器都进行了代码的优化,因此把C编译生成的exe文件反编译成C代码非常困难。但是像Java、
.net
这样基于
虚拟机
技术
的编程语言则反编译非常容易,Java平台下有Jad、Jode、JD等反编译器,
.net
平台下则有Reflector等反编译器,反编译质量非常高,甚至和源代码几乎没什么差别。
.NET Framework
17,740
社区成员
24,334
社区内容
发帖
与我相关
我的任务
.NET Framework
.NET技术 .NET Framework
复制链接
扫一扫
分享
社区描述
.NET技术 .NET Framework
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章