首页 / 知识
关于.net:MSIL和Java字节码之间的区别?
2023-04-17 07:20:00

Differences between MSIL and Java bytecode?我是.Net的新手,我想首先了解基础知识。 MSIL和Java字节码有什么区别? 首先,我要说的是,我不认为Java字节码与MSIL之间的细微差别不会使.NET开发新手感到困扰。它们都具有定义抽象目标机器的相同目的,该目标机器是最终使用的物理机器之上的一层。
MSIL和Java字节码非常相似,实际上有一个名为Grasshopper的工具可将MSIL转换为Java字节码,我是Grasshopper开发团队的一员,所以我可以分享一些(淡淡的)知识。
还有其他语言差异,但大多数差异不是在字节码级别表达的,例如,如果内存服务于Java的非 他们本质上是在做同样的事情,MSIL是Microsoft的Java字节码版本。 内部的主要区别是: K John Gough在本文中可以找到更多的信息和详细的比较(后记文档) CIL(MSIL的专有名称)和Java字节码相同,不同之处更多。但是有一些重要的区别: 1)CIL从一开始就被设计为多种语言的目标。因此,它支持更丰富的类型系统,包括有符号和无符号类型,值类型,指针,属性,委托,事件,泛型,具有单个根的对象系统等等。 CIL支持初始CLR语言(C#和VB.NET)不需要的功能,例如全局功能和尾部调用优化。相比之下,Java字节码被设计为Java语言的目标,并且反映了Java本身中的许多约束。使用Java字节码编写C或Scheme会更加困难。 2)CIL旨在轻松集成到本机库和非托管代码中 3)Java字节码设计为可解释或编译,而CIL设计为仅假定JIT编译。也就是说,Mono的初始实现使用解释器而不是JIT。 4)CIL被设计(并指定)为具有人类可读可写的汇编语言形式,可以直接映射到字节码形式。我相信Java字节码(顾名思义)仅是机器可读的。当然,Java字节码相对容易地反编译回原始Java,如下所示,它也可以"反汇编"。 我应该注意,JVM(其中的大多数)比CLR(其中的任何一个)具有更高的优化程度。因此,原始性能可能是首选针对Java字节码的原因。不过,这是一个实现细节。 有人说Java字节码设计为多平台,而CIL仅设计为Windows。不是这种情况。 .NET框架中有一些" Windows"机制,但CIL中没有。 作为上面第4点的示例,我不久前将玩具Java编写为CIL编译器。如果您向该编译器提供以下Java程序:
我的编译器将吐出以下CIL:
这是一个有效的CIL程序,可以将其输入到像
您还可以使用
CIL(又称MSIL)旨在为人类可读。 Java字节码不是。 可以将Java字节码看作是不存在的硬件(但可以模拟JVM)的机器代码。 CIL更像是汇编语言-距机器代码仅一步之遥,同时仍是人类可读的。 差别不大。两者都是您编写的代码的中间格式。在执行时,虚拟机将执行托管的中间语言,这意味着虚拟机将控制变量和调用。甚至还有我现在不记得的一种语言,它可以以相同的方式在.Net和Java上运行。 基本上,这只是同一件事的另一种格式 编辑:找到了语言(除了Scala):是FAN(http://www.fandev.org/),看起来很有趣,但是还没有时间评估 我认为MSIL不应与Java字节码进行比较,而应与"组成Java字节码的指令"进行比较。
没有反汇编的Java字节码的名称。" Java字节码"应该是非官方的别名,因为我在官方文档中找不到它的名称。
" Java VM指令"和" MSIL"都被组装为.NET字节码和Java代码,它们是人类不可读的。 Serge Lidin撰写了一本有关MSIL详细信息的体面的书:Expert .NET 2.0 IL汇编器。通过使用.NET Reflector和Ildasm(教程)的简单方法,我还能够快速掌握MSIL。 MSIL和Java字节码之间的概念非常相似。 同意,差异足够细微,可以初学者学习。如果您想从基础开始学习.Net,建议您查看一下公共语言基础结构和公共类型系统。 |
最新内容
相关内容
linux切换目标命令?
linux切换目标命令?,系统,密码,工具,命令,一致,工作,用户,终端,目录,用户名,linuxcat命令可以在不同目录中切换吗?1、首先仅仅从目录切换来看,lpythonHTTP与HTTPS之间的区别
pythonHTTP与HTTPS之间的区别,通信,信息,状态,证书,数据,时间,服务,灵活,培训,网络,我们都知道Python的应用场景很多,包括Web开发,也可以理解为Python类与类之间的关系是什么?
Python类与类之间的关系是什么?,代码,概念,名称,教育,科技,技术,基础,培训,关系,属性,我们都知道Python编程语言是面向对象的,在面向对象中,有类Spyder和Python之间是什么关系?
Spyder和Python之间是什么关系?,工作,位置,环境,观察,对比,工具,状态,数据,分析,培训,想必很多人都听说过Spyder,那么你知道它和Python之间有什python之什么是字节码(bytecode)?
python之什么是字节码(bytecode)?,代码,分析,平台,时间,质量,网上,情况,数据,环境,培训,简单的说它就是一个从源代码编译而来的中间文件(用于python字节码和机器码的区别
python字节码和机器码的区别,数据,代码,地址,数字,电脑,状态,字节,机器码,亚洲,培训,机器码,学名机器语言指令,有时也被称为原生码,是电脑的CPUPython 抽象类
Python 抽象类,数据,设计,概念,培训,方法,定义,属性,接口,功能,内容,1.什么是抽象类与java一样,python也有抽象类的概念但是同样需要借助模块python 字节码指令
python 字节码指令,代码,数据,信息,工具,标准,培训,字节,指令,文件,对象,为什么pyc文件也称作字节码文件?因为这些文件存储的都是一些二进制python 抽象类和抽象接口
python 抽象类和抽象接口,概念,基础,设计,培训,数据,接口,方法,相似性,属性,函数,抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如alpython 抽象类
python 抽象类,数据,概念,设计,培训,方法,定义,功能,内容,水果,桃子,什么是抽象类与java一样,python也有抽象类的概念但是同样需要借助模块实python 抽象类和接口类
python 抽象类和接口类,支付,设备,设计,网络,代码,概念,培训,接口,细节,对象,继承有两种用途:一:继承基类的方法,并且做出自己的改变或者扩展(代python多线程和多进程之间的联系
python多线程和多进程之间的联系,进程,培训,通信,标准,管理,代理,线程,模块,之间,全部,关于多线程的大概讲解:在Python的标准库中给出了2个模