本文简单介绍一下在写代码过程中用到的一些让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. Ubuntu gedit 折叠插件

    Ubuntu Kylin 14.04 gedit  - Version 3.10.4 (as same as all version of gedit 3.x ) Attention: this pl ...

  2. border-radius导致overflow:hidden失效问题。

    如果一个父元素设置了overflow:hidden属于的同时还设置了border-radius属性,那么如果想隐藏超出的子元素,四个圆角处会出现超出圆角依然显示的bug: 一种方法是运用-webkit ...

  3. jQuery网页元素拖拽插件

    效果说明:配合已有CSS样式,载入插件后,网页元素可以随意在窗口内拖拽,设置了原位置半透明和拖拽半透明的效果选项,可根据需要选择.另外,当页面上有多个可拖拽元素时,可以载入另外一个用于设置z-inde ...

  4. C# 实现HTML5服务器推送事件

    为什么需要服务器推送事件: 因为如果需要保持前台数据的实时更新例如,IM聊天,股票信息, 1.可以在客户端不断地调用服务端的方法来获得新数据,但是这样会很消耗服务器资源,导致系统变慢! 2 html5 ...

  5. FileStream使用小记

    流用于对IO处理 在System.IO名称空间中有以下类 BinaryReader/Writer TextReader/Writer Stream 其中类Stream为抽象类.由此有三个派生类: Me ...

  6. 伪元素content的应用

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

  7. 用JS写的放大镜

    代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

  8. 长安铃木经销商爬取(解析xml、post提交、python中使用js代码)

    1.通过火狐浏览器,查找大长安铃木官网中关于经销商的信息主要在两个网页中 http://www.changansuzuki.com/khfw/xml/pro.xml  地域信息 http://www. ...

  9. 在ubuntu下给eclipse创建桌面快捷方式

    在桌面进行编辑 编辑eclipse.desktop [Desktop Entry] Encoding=UTF-8 Name=Eclipse Platform Comment=Eclipse IDE E ...

  10. ThinkPHP的缓存 F方法

    一般使用文件方式的缓存就能够满足要求,而thinkphp还提供了一个专门用于文件方式的快速缓存方法f方法. 由于采用的是php返回方式,所以其效率较s方法较高. f方法具有如下特点: 1.简单数据缓存 ...