网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  编写高级应用程序1     
  文章作者:未知  文章来源:水木森林  
  查看:59次  录入:管理员--2007-11-17  
 
  新的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<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 accum 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 application时,如何设置proxy的信息    下一篇: 编写高级应用程序2
  相关文档
如何用Java操作Word, Excel, PDF文档 04-14
java套接字编程(下) 11-17
rmi规范--第八章 11-17
jsp学习记录(七)——taglib 命令 11-17
pop 方法 11-16
java 能扮演嵌入式应用开发的主角吗? 11-16
开发j2ee应用程序应遵循的几点基本原则 11-16
一个最简单的java程序 11-17
【jsf心得】java的对象传递是引用传递 11-17
对java程序中的中文乱码问题的解决方法 11-16
setutcmonth 方法 11-16
driveexists 方法 11-16
servlet容器工作原理讲解(三) 11-17
在jdk1.4中使用java 5的语言特性 11-17
java中异常机制的研究 11-17
easydbo中java注解配置映射的原理及使用 11-17
java学习方法浅谈 11-17
在j2me程序中实现字符串分割 11-16
spring创建一个简单的工作流引擎(图) 11-17
jdbc+hibernate将blob数据写入oracle 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息