引言:
JVM结构基础
前段时间由于研究原来广为传播的String和StringBuffer的性能问题,自己做了几个小实验并得出一些结论,但是从网友的反应来看那个研究并没有起到应有的目的,而且网友也很中肯的提出了自己的意见并对实验中的一些内容指出了其缺陷,针对他们的反应我又反编译了...
摘要:
big-5 码是通行于台湾、香港地区的一个繁体字编码方案,俗称“大五码
”。它并不是一个法定的编码方案,存在着一些瑕疵,业界的评价也不高,但它
广泛地被应用于电脑业,尤其是国际互联网中,从而成为一种事实上的行业标
准。
关于 big-5 码的背景,一直未见详细记载,兹据我掌握的资料,介绍如下:
1983 年 10 月,台湾国家科学委员会......
摘要:
了解 java classloader
什么是 classloader?
在流行的商业化编程语言中,java 语言由于在 java 虚拟机 (jvm) 上运行而显得与众不同。这意味着已编译的程序是一种特殊的、独立于平台的格式,并非依赖于它们所运行的机器。在很大程度上,这种格式不同于传统的可执行程序格式。
与 c 或 c++ 编写的程序不同,java 程序并......
JVM结构基础(一)
jvm结构基础
前段时间由于研究原来广为传播的string与stringbuffer的性能问题,自己做了几个小实验并得出一些结论,但是从网友的反应来看那个研究并没有起到应有的目的,而且网友也很中肯的提出了自己的意见并对实验中的一些内容指出了其缺陷,针对他们的反应我又反编译了代码来进行对比,但是几位网友仍然不是很信服,而且上次实验的结果与反编译得到的结论并不能完全吻合,因为反编译代码的对比基本上是基于语句的多少,因此这个这个对比也确实不能使人信服,但是这给我的下一步行动指引了方向:研究jvm指令与jvm结构,在对反编译后的代码有完全的理解才能给出可能使人信服的结论.
本文以及以后将要写的一些文章就是我研究jvm规范的一些心得,我希望在与大家共同理解的基础上进行我们下一轮的深入研究.
好,闲话少说,开始我们的正文.
jvm执行的对象就是大家非常熟悉的class文件,我们也称为类文件,jvm规范定义的这个编译完成的代码文件(虽然并非强制要求是实际的文件)的格式非常的详实,但是我们这里只说一些宏观的内容,以后有机会再研究细节的内容吧.jvm要求的类文件的格式是与硬件与操作系统无关的一种二进制格式,它精确定义了类或者接口的表示,它甚至包含了字节顺序这样的细节,而字节顺序在特定平台的目标文件格式中一般都是固定的,不会进行说明.
jvm所支持的数据类型与java语言规范中定义的几乎一样,请注意是几乎一样!也就是原始类型与引用类型,他们可以被存储在变量表中,也可以作为参数传递.被方法返回,更通常的就是成为操作的对象.为什么与java语言规范中定义的不完全一样呢?因为jvm中有一种java语言所没有的原始类型:返回地址类型(returnaddress type).该类型是jsr, ret以及jsr_w指令需要使用到的,它的值是jvm指令的操作码的指针,并且它的值是不能被运行中的程序所修改的.
另外需要提到的就是布尔类型的值,虽然在java语言中它是完全独立的值,但是在jvm中只提供了对它的有限支持,表现在:
没有单独的操作布尔类型的指令,源代码中的布尔类型的操作在编译以后是作为int类型的值进行操作的.
jvm直接支持布尔数组,newarray指令可以创建布尔数组,而它的访问与修改操作却是使用byte类型的数组的操作指令进行的:baload,bastore.(在jdk1.0,1,1以及1.2中,布尔数组被编码为byte数组,每个元素是8位)
jvm用1代表true,用0代表false,编译器将源代码中的布尔类型映射为jvm中的int类型,而且必须与jvm的要求一致.
另外jvm规范中对于浮点类型的数据有大段的说明,我没有怎么看,主要是讨论jvm的浮点型与ieee 754的关系的.
关于类型的另外一个需要提一下的是类型检查....
下一页 摘要:
概念比较:
java c#
byte code il(字节码,中间语言)
jvm.dll mscrolib.dll,mscrojit.dll(虚拟机)
jre clr(运行环境)
jdk .net framework(开发框架)
package assembly(类库,程序集)
一、关于类库的版本管理问题
java和c#代码运行要依靠其运行环境(......