`
pda158
  • 浏览: 189764 次
社区版块
存档分类
最新评论

让Java代码跑得更快

阅读更多

1、将一些系统资源放在池中,如数据库连 接,线程等.在standalone的应用中,数据库连接池可以使用一些开源的连接池实现,如C3P0,proxool和DBCP等,在运行在容器中的应 用这可以使用服务器提供的DataSource.线程池可以使用JDK本身就提供的 java.util.concurrent.ExecutorService.

    import java.util.concurrent.Executors;  
    import java.util.concurrent.ExecutorService;  
    public class JavaThreadPool {  
        public static void main(String[] args) {  
        ExecutorService pool = Executors.newFixedThreadPool(2);  
          
        Thread t1 = new MyThread();  
        Thread t2 = new MyThread();  
        Thread t3 = new MyThread();  
        Thread t4 = new MyThread();  
        Thread t5 = new MyThread();  
        pool.execute(t1);  
        pool.execute(t2);  
        pool.execute(t3);  
        pool.execute(t4);  
        pool.shutdown();  
        }  
    }  
    class MyThread extends Thread {  
        public void run() {  
        System.out.println(Thread.currentThread().getName() + "running....");  
        }  
    }

 

  2、减少网络开销,在和数据库或者远程服务交互的时候,尽量将多次调用合并到一次调用中。

   3、将经常访问的外部资源cache到内存中,简单的可以使用static的hashmap在应用启动的时候加载,也可以使用一些开源的cache框 架,如OSCache和Ehcache等.和资源的同步可以考虑定期轮询和外部资源更新时候主动通知,或者在自己写的代码中留出接口(命令方式或者界面方 式)共手动同步。

  4、优化IO操作,JAVA操作文件的时候分InputStream and OutputStream,Reader and Writer两类,stream的方式要快,后者主要是为了操作字符而用的,在字符仅仅是ASCII的时候可以用stream的方式提高效 率.JDK1.4之后的nio比io的效率更好。

    OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("d:/temp/test.txt")));              
    out.write("abcde".getBytes());        
    out.flush();  
    out.close();
 

     利用BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter减少对磁盘的直接访问次数。

    FileReader fr = new FileReader(f);  
    BufferedReader br = new BufferedReader(fr);  
    while (br.readLine() != null) count++;
 

  5、不要频繁的new对象,对于在整个应用中只需要存在一个实例的类使用单例模式.对于String的连接操作,使用StringBuffer或者StringBuilder.对于utility类型的类通过静态方法来访问。

   6、避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做条件判断,尽量使用比的条件判断方式.使用JAVA中效率高的类,比如ArrayList比Vector性能好。

  7、对性能的考虑要在系统分析和设计之初就要考虑。

  总之,一个系统运行时的性能,无非是从CPU,Memory和IO这三个主要方面来考虑优化.减少不必要的CPU消耗,减少不必要的IO操作,增加Memory利用效率。

8
2
分享到:
评论
1 楼 houyujiangjun 2013-11-29  
第一条:现在综合性能最好的java连接池是tomcat7自带的jdbc datasourcePool.
第三条:这个需要做权衡.有些时候使用cache,比如memcached,都要进行序列化和反序列化,开销也不低,如果是字符串最好直接放到类似hashMap中,当然也要考虑容量问题,这些都不是单纯的这样讲的,需要考虑很多因素.甚至业务上,也可能有很大的影响.
第六条:其实更应该这样说: 1. 尽量不要使用Exception,要细化,使用FileNotFound ,NullPointerException 等等. 2. 不要将大段的代码都放到try模块中, 掌握精度,精确控制.  3.finally的使用要慎重.

相关推荐

    让Java代码更高效

    主要介绍了如何让你的Java代码更高效,让Java跑得更快,感兴趣的小伙伴们可以参考一下

    《Java多线程设计模式详解》(PDF及源码)

    如何充分利用系统资源,如何让你的软件跑得更快?如何在多处理器下更好的实现多线程呢?该书详细阐述了JAVA多线程的设计、开发并配有测试源代码,更值得注意是将多线程设计与设计模式结合起来,供我们设计大型服务器...

    直连Colab,支持20种编程语言:谷歌版ChatGPT代码水平太牛了.zip

    只需要简单的 prompt,例如「能让该代码更快吗?」,Bard 就能理解人类意图,自动让代码变得更高效。 我们知道,很多人会使用 Google Colab 跑机器学习模型,它还自带免费的云 GPU 算力。现在人们也可以轻松地将 ...

    编写程序高手的造就的文章

    中国人大都喜欢用武侠小说来比较软件开发,但是在实战武功中,只有葵花宝典才是最厉害的,也只有掌握了葵花宝典,才能称为“不败”。  但什么才是软件开发的...我们都是和自己赛跑的人,需要跑得比昨天的自己更快。

    java反编译源码保护-zh-unit-testing-guidelines:Geotechnical单元测试准则-中文版

    任何代码提交前都应该完整跑一遍所有测试套件. 保持测试代码执行迅捷能够缩短迭代开发周期. 2. 单元测试应该是全自动且无交互 测试套件通常是定期执行的, 执行过程必须完全自动化才有意义. 需要人工检查输出结果

    《Wicket开发指南一书》PDF版本下载

    因此对于这种有创新性的轮子,多几个,或许Java世界可以跑得更快一些。 去年就听说不少Web框架的开发人员要联合起来开一个Web框架,在Yahoo上还有一个讨论组,上去看了一下。但是这个事件对我的第一感觉...

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    建议自己下载源码,让Demo跑起来,然后跑的更快,有问题加群解决。 声明: 本人提供这个Shiro + SpringMvc + Mybatis + Redis 的Demo 本着学习的态度,如果有欠缺和不足的地方,给予指正,并且多多包涵。 “去其...

    PERL语言编程

    最后,Perl 还可以让你设置一个特殊的防护隔段运行那些来源不明的 Perl 代码,以此来杜绝危险操作。 <br/>不过,偏执一点儿说,Perl 帮你的大部分内容和 Perl 本身没有什么关系,而是和使用 Perl 的人有关。...

    smartsprites:CSS Sprites Generator完成。 SmartSprites完全自动维护设计中CSS Sprite。 添加或更改拼接图像时,无需繁琐的复制和粘贴到CSS

    注意,已停产的软件! 由于现代Web不再依赖小位图,因此SmartSprites变得无关紧要。...文献资料有关使用SmartSprites的更多说明以及详细的语法参考,请参见:错误追踪器源代码Eclipse插件要直接在Ecli

    camo:用于类 Mongo 数据库的基于类的 ES6 ODM

    来自 Java 背景,我更容易设计和编写类的代码,我怀疑这对许多 JavaScript 初学者来说都是如此。 虽然 ES6 类没有为该语言带来任何新功能,但它们确实让使用 JavaScript 进入 OOP 变得更加容易,这足以引起新的库 ...

    Activiti6.0教程例子下载

    所谓的一分钟入门就是通过运行你下载的包里的wars文件夹里的activiti-explorer.war文件,以便更快的了解Activiti。将文件拷贝至Tomcat的webapps目录,启动tomcat,输入http://localhost:8080/activiti-explorer。...

    华为编程开发规范与案例

    在新的编程思想中,指针基本上被禁止使用(JAVA中就是这样),至少也是被限制使用。而在我们交换机的程序中大量使用指针,并且有增无减。 2、防止指针/数组操作越界 【案例1.2.1】 在香港项目测试中,发现ISDN话机...

    海量数据引擎SF1R.zip

    相比Lucene社区的庞大代码仓库,SF1R的项目要精简得多,因此更加 便于针对特定场景进行修改和维护,这从SF1R支持3种索引结构就可以看出,此外,针对广告检索, SF1R也可以方便扩充第4种索引,这些都是传统搜索解决...

    手机 pdf 阅读器

    在三星手机上,时间会走得比较快,由于没有真机,实在找不到问题所在 [2008.1.1] Ver:3.2.1 修正了阅读历史图标显示不正确的BUG 修正了阅读HTML文件时,不显示空格的BUG 修正HTML阅读时解析不正确的BUG 提升HTML...

Global site tag (gtag.js) - Google Analytics