选择显示字体大小

编写高级应用程序

  新的javatm 虚拟机(vms)具有能够提高性能的特点, 并且你可以使用许多工具来提高应用程序的性能或减小一般类文件的尺寸。这种java虚拟机的特性和工具可使你在不改变应用程序、或对应用程序仅做很小改动的情况下, 提高应用程序的性能。

  java虚拟机的特性


  java2与过去的版本相比, 性能已有很大提高, 其中包括更快的内存分配、类尺寸的减小、垃圾收集的改善、最新型的监控器和作为标准的内联jit技术。当使用新的java2虚拟机时, 你会看到这种性能的改善; 然而, 如果你能够理解速度是如何提高的, 你就能够调整你的应用程序, 以充分挖掘每一点性能潜力。
方法内联
java虚拟机的java2版可在运行时自动内联简单方法。在一个未优化的java虚拟机中,每调用一次新的方法,就创建一个新的堆栈帧(stack frame)。创建一个新的堆栈帧需要一些额外的资源以及该栈的某些再映射(re-mapping),其结果将导致系统开销的少许增加。


  由于方法内联可在你的程序中减少方法调用的次数,因而可提高性能。java虚拟机内联代码内联了返回常数或仅访问内部域(internal fields)的方法。为了利用方法内联,你可以从以下两件事中选做其一;即:你可以使一个方法对虚拟机所要执行的内联看上去是有吸引力的,或者你可以手工内联一个方法,只要它不破坏你的对象模型。在这一语境中的手工内联意味着可以直接从一个方法中将代码移动到正在调用该方法的方法中。


下面的小例子演示了虚拟机的自动方法内联:
public class inlineme {

int counter=0;

public void method1() {
for(int i=0;i$#@60;1000;i++)
addcount();
system.out.println("counter="+counter);
}

public int addcount() {
counter=counter+1;
return counter;
}

public static void main(string args[]) {
inlineme im=new inlineme();
im.method1();
}
}


  在当前状态,addcount方法对虚拟机中的内联探测器显得是没有吸引力的,因为addcount方法返回一个值。要发现该方法是否被内联:

java -xrunhprof:cpu=times inlineme

它生成一个java.hprof.txt输出文件。前十个方法类似下面的结果:

cpu time (ms) begin (total = 510) thu jan 28 16:56:15 1999
rank self acc count trace method
1 5.88% 5.88% 1 25 java/lang/character.
2 3.92% 9.80% 5808 13 java/lang/string.charat
3 3.92% 13.73% 1 33 sun/misc/launcher$appclassloader.getpermissions
4 3.92% 17.65% 3 31 sun/misc/urlclasspath.getloader
5 1.96% 19.61% 1 39 java.net/urlclassloader.access$1
6 1.96% 21.57% 1000 46 inlineme.addcount
7 1.96% 23.53% 1 21 sun/io/converters.newconverter
8 1.96% 25.49% 1 17 sun/misc/launcher$extclassloader.getextdirs
9 1.96% 27.45% 1 49 java/util/stack.peek
10 1.96% 29.41% 1 24 sun/misc/launcher.

如果你将addcount方法改变为不再返回一个值,则虚拟机可在运行时将其内联。为使内联代码更友好,应用下面的程序替换addcount方法:

public void addcount() {
counter=counter+1;
}

再次运行profiler:

java -xrunhprof:cpu=times inlineme

这次,java.hprof.txt的输出应该显得是不同的。
addcount方法已经消失。它已被内联了!

cpu time (ms) begin (total = 560) thu jan 28 16:57:02 1999
rank self accum count trace method
1 5.36% 5.36% 1 27 java/lang/character.
2 3.57% 8.93% 1 23 java/lang/system.initializesystemclass
3 3.57% 12.50% 2 47 java/io/printstream.
4 3.57% 16.07% 5808 15 java/lang/string.charat
5 3.57% 19.64% 1 42 sun.net/www/protocol/file/handler.openconnection
6 1.79% 21.43% 2 21 java/io/inputstreamreader.fill
7 1.79% 23.21% 1 54 java/lang/thread.
8 1.79% 25.00% 1 39 java/io/printstream.write
9 1.79% 26.79% 1 40 java/util/jar/jarfile.getjarentry
10 1.79% 28.57% 1 38 java/lang/class.forname0


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons