编写高级应用程序

2016-02-19 14:31 6 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享编写高级应用程序教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - 编程语言 】

新的JavaTM 虚拟机(VMs)具有能够提高性能的特点, 并且你可以使用许多工具来提高应用程序的性能或减小一般类文件的尺寸。这种Java虚拟机的特性和工具可使你在不改变应用程序、或对应用程序仅做很小改动的情况下, 提高应用程序的性能。
  
     Java虚拟机的特性
  !-- frame contents -- !-- /frame contents --
  
     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
  

来源:http://www.tulaoshi.com/n/20160219/1607139.html

延伸阅读
标签: SQLServer
介绍 SQL是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。典型的执行语句是query,它能够收集比较有达标性的记录并返回一个单一的结果集。SQL语言可以修改数据库结构(数据定义语言)和操作数据库内容(数据操作语言)。在这份文档中,我们将特别讨论SQLSERVER所使用的Tran...
你时常被客户抱怨JSP页面响应速度很慢吗?你想过当客户访问次数剧增时,你的WEB应用能承受日益增加的访问量吗?本文讲述了调整JSP和servlet的一些非常实用的方法,它可使你的servlet和JSP页面响应更快,扩展性更强。 而且在用户数增加的情况下,系统负载会呈现出平滑上长的趋势。在本文中,我将通过一些实际例子和配置方法使得你的应用程序的...
Service是什么 Service是一个android 系统中的应用程序组件,它跟Activity的级别差不多,但是他没有图形化界面,不能自己运行,只能后台运行,并且可以和其他组件进行交互如更新ContentProvider,Intent以及系统的通知等等。其启动方式有两种:context.startService() 和 context.bindService()。Service通常用来处理一些耗时比较长的操作。 ...
标签: Java JAVA基础
本技巧将向您讲述如何编写可通过代理访问因特网上的Web服务器的Java应用程序。在Java应用程序中加入代理支持只需额外编写几行代码,且不依赖任何安全性“漏洞”。 几乎所有的公司都十分关注保护自己的内部网络,以防黑客及入窃者。一种常见的安全措施是完全断开与因特网的连接。如果黑客们不能连接到您的任何一台机器,他们...
标签: SQLServer
  摘要: 这份文档是详细讨论SQL注入技术,它适应于比较流行的IIS+ASP+SQLSERVER平台。它讨论了哪些SQL语句能通过各种各样的方法注入到应用程序中,并且记录与攻击相关的数据确认和数据库锁定。 这份文档的预期读者为与数据库通信的WEB程序的开发者和那些扮演审核WEB应用程序的安全专家。 介绍: SQL是一种用于关系数据库的结构化查询...

经验教程

360

收藏

69
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部