本文简单介绍一下在写代码过程中用到的一些让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:/test.txt")));

out.write("abcd".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对象, 对于在整个应用中只需要存在一个实例的类使用单例模式.

6.   对于String的连接操作, 使用StringBuffer或者StringBuilder.

7.   对于utility类型的类通过静态方法来访问.

避免使用错误的方式, Exception可以控制方法推出, 但是Exception要保留stacktrace消耗性能, 除非必要, 不要使用instanceof做条件判断, 尽量使用比的条件判断方式.

8. 使用JAVA中效率高的类,比如ArrayList比Vector性能好.

9. 对性能的考虑要在系统分析和设计之初就要考虑.

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

让JAVA代码跑得更快的更多相关文章

  1. 面试官:如何写出让 CPU 跑得更快的代码?

    前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能. CPU 内部嵌入了 CPU ...

  2. 让DB2跑得更快——DB2内部解析与性能优化

    让DB2跑得更快——DB2内部解析与性能优化 (DB2数据库领域的精彩强音,DB2技巧精髓的热心分享,资深数据库专家牛新庄.干毅民.成孜论.唐志刚联袂推荐!)  洪烨著 2013年10月出版 定价:7 ...

  3. UOJ 【UR #5】怎样跑得更快

    [UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...

  4. 90% 的 Java 程序员都说不上来的为何 Java 代码越执行越快(2)- TLAB预热

    经常听到 Java 性能不如 C/C++ 的言论,也经常听说 Java 程序需要预热,那么其中主要原因是啥呢? 面试的时候谈到 JVM,也有很多面试官喜欢问,为啥 Java 程序越执行越快呢? 一般人 ...

  5. 【UOJ#62】【UR #5】怎样跑得更快(莫比乌斯反演)

    [UOJ#62][UR #5]怎样跑得更快(莫比乌斯反演) 题面 UOJ 题解 众所周知,\(lcm(i,j)=\frac{ij}{gcd(i,j)}\),于是原式就变成了: \[\sum_{j=1} ...

  6. 「UR#5」怎样跑得更快

    「UR#5」怎样跑得更快 膜这个您就会了 下面是复读机mangoyang 我们要求 \[ \sum_{j=1}^n \gcd(i,j)^{c-d} j^d x_j=\frac{b_i}{i^d} \] ...

  7. [翻译] 5点建议,让iOS程序跑得更快

      [文章原地址]http://mobile.tutsplus.com/tutorials/iphone/ios-quick-tip-5-tips-to-increase-app-performanc ...

  8. 90% 的 Java 程序员都说不上来的为何 Java 代码越执行越快(1)- JIT编译优化

    麻烦大家帮我投一票哈,谢谢 经常听到 Java 性能不如 C/C++ 的言论,也经常听说 Java 程序需要预热,那么其中主要原因是啥呢? 面试的时候谈到 JVM,也有很多面试官喜欢问,为啥 Java ...

  9. 让你的 Node.js 应用跑得更快的 10 个技巧(转)

    Node.js 受益于它的事件驱动和异步的特征,已经很快了.但是,在现代网络中只是快是不行的.如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异 ...

随机推荐

  1. Nginx日志按天分割

    核心思想:使用crontab在每日23:59执行日志分割. 1.配置nginx日志信息,vim /etc/logrotate.d/nginx /var/log/nginx/*.log { nocomp ...

  2. C# Redis实战

    转自  :http://blog.csdn.net/qiujialongjjj/article/details/16945569 一.初步准备 Redis 是一个开源的使用ANSI C 语言编写.支持 ...

  3. NodeJS + Socket.io聊天服务器连接数达到1024后就连不上了

    如果是亚马逊的Engine Yard服务器,解决办法为: 1.查看端口占用情况,找到nodejs进程号,例如我这里是8000端口 lsof -i:8000  找到pid 例如为 8213 2.设置no ...

  4. 伪元素content的应用

    日常开发中,我们常用:before,:after来实现一些效果,比如 – 边框 – 图标 此时的content中只是为了伪元素能渲染出来而声明 1 2 3 div:before{ content: & ...

  5. 設定 Bootstrap/SASS/Bower/gulp (Windows平台)

    請注意:在進行以下步驟前,你會需要先安裝git,可以參考這篇 git安裝教學 前言 時至今日,幾乎每個人都在討論bootstrap.less 或 sass.我們知道它們是比較新的前端技術,而且有開始愈 ...

  6. python基础教程笔记—即时标记(详解)

    最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...

  7. CC2640-之功耗

    一.测量方式,以DEMO板测量,以消除其它外围不同造成的电流不同. 二.测量结果 以原厂simpleBLEperipheral工程为例 1.如果在低功耗模式下,+5DB发射,最小电流为1.66MA 2 ...

  8. 使用泛型 类型“System.Collections.Generic.IEnumerator<T>”需要 1 个类型参数

    解决办法:添加 using System.Collections:命名空间

  9. Kinetic使用注意点--image

    new Image(config) 参数: config:包含所有配置项的对象. { image: "图片对象", crop: "图片裁剪对象", fill: ...

  10. Guide to Database Migration from Microsoft SQL Server using MySQL Workbench

    http://mysqlworkbench.org/2012/07/migrating-from-ms-sql-server-to-mysql-using-workbench-migration-wi ...