|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。
要真正相互断绝Java使用程序,本色上必要多个JVM,但是启动本钱和内存占用使这类体例不那末幻想。而共享类能够同时办理这两个成绩。在多JVM情况中,共享类经由过程将一组中心体系类装载到共享内存中,能够在多个JVM中共享这些类。这些共享类放到内存的一个共享地区中,它们在这里对一切JVM都是坚持分歧的。了局,共享类只必要在第一次利用古装载到内存中,这打消了在今后每次JVM挪用古装载它们的流动本钱,并削减了每一个JVM中的内存占用。
IBM在z/OS平台上完成了共享类手艺。AppleComputerInc.在MacOSX上完成了名为JavaSharedArchive(JSA)的一种共享类,而Sun在J2SE1.5版中引进了基于JSA手艺的ClassDataSharing(CDS)。让我们剖析一下这些完成是怎样事情的。
IBM的完成
自J2SE1.3.1以来,IBM就在z/OS平台上供应了共享类手艺的完成。这类完成是经由过程让一个主(或称master)JVM将中心体系类装载到共享内存完成的,那末这究竟是甚么意义呢?
分化堆
内存分为共享堆和Java堆。主JVM将体系堆(即共享堆)分派到共享内存中,这里是安排体系类的中央。体系堆在主JVM的保存周期中一向存在,而且不会遭到渣滓搜集(GC)的影响。每个后续(大概worker)JVM附加到这个体系堆上,如所示,并为本人的Java堆分派非共享内存,它会受渣滓搜集的影响。Java堆包括特定于每个workerJVM运转的使用程序的非共享类和一切实例化的对象。
.共享类分化堆
共享类装载器
每一个workerJVM都能够经由过程将类放到共享类装载器的classpath中而将它们装载到共享堆中。共享类与一般类的装载体例一样——利用parent-delegation形式。
条理布局中的每个类装载器反省其缓存,断定这个类是不是已装载。假如还没有装载,那末类装载器就向其父类装载器传送一个反省装载哀求,如许一向上溯到条理布局顶部的primordial大概bootstrap类装载器。假如没有在任何缓冲区中发明这个类,那末每个类装载器城市试图从本人的存储库中装载这个类,假如乐成,就前往这个类。不然,它将哀求传送给条理布局中上面的装载器。这类模子包管了起首反省最受信托的存储库,并避免信托水平低的代码经由过程接纳与中心API成员不异的名字取代受信托的中心API类。
假如类是primordial类大概界说的类装载器是共享类装载器,那末类对象将在共享堆中创立,而且类标志为共享类。显现了bootstrap类装载器位于类装载器条理布局的顶部,并卖力装载中心API中的类。这些类是信托水平最高的。扩大类装载器装载extensions目次中的尺度扩大JAR文件中的类。共享使用程序类装载器能够用于共享用户大概使用程序类。
.类装载器条理布局
<p>
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。 |
|