joda-time 日常使用效率测试

 

joda time官网地址:http://joda-time.sourceforge.net/

 

最近项目上引进joda-time.jar,进行日期类处理,使用方便,灵活。

抱着怀疑的态度做了一个简单的基本使用测试,用数据来证明一切。

 

测试环境:

JDK:sun JDK 1.6.31

joda-time.jar: joda-time-2.1.jar

机器系统:xp

开发软件:eclipse3.7.2

 

直接代码说话

 

 

Java代码 
  1. import java.text.SimpleDateFormat;  
  2. import java.util.Calendar;  
  3. import java.util.Date;  
  4.   
  5. import org.joda.time.DateTime;  
  6.   
  7. public final class Test {  
  8.   
  9.     private Test() {  
  10.     }  
  11.   
  12.     /** 
  13.      * 测试jodatime日期处理效率
     
  14.      *  
  15.      * @author liujinxin 
  16.      * @param preheatCount 
  17.      *            预热次数 
  18.      * @param runCount 
  19.      *            运行次数 
  20.      */  
  21.     private static void testJoda(int preheatCount, int runCount) {  
  22.         // 预热代码  
  23.         for (int i = 0; i < preheatCount; i++) {  
  24.             new DateTime();  
  25.         }  
  26.         // 测试部分  
  27.         final long start = System.currentTimeMillis();  
  28.         for (int i = 0; i < runCount; i++) {  
  29.             final DateTime dateTime = new DateTime();  
  30.             // 测试日期修改  
  31.             // new DateTime().plusHours(1);  
  32.             // 测试日期格式化  
  33.             dateTime.toString("yyyy-MM-dd HH");  
  34.   
  35.         }  
  36.         final long end = System.currentTimeMillis();  
  37.         System.out.println(end - start);  
  38.     }  
  39.   
  40.     /** 
  41.      * 测试JDK日期处理效率
     
  42.      *  
  43.      * @author liujinxin 
  44.      * @param preheatCount 
  45.      *            预热次数 
  46.      * @param runCount 
  47.      *            运行次数 
  48.      */  
  49.     private static void testCalendar(int preheatCount, int runCount) {  
  50.         // 预热代码  
  51.         for (int i = 0; i < preheatCount; i++) {  
  52.             Calendar.getInstance();  
  53.         }  
  54.         // 测试部分  
  55.         final long start1 = System.currentTimeMillis();  
  56.         for (int i = 0; i < runCount; i++) {  
  57.             // 测试日期修改  
  58.             // Calendar.getInstance().add(Calendar.HOUR, 1);  
  59.             // 测试日期格式化  
  60.             final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH");  
  61.             simpleDateFormat.format(new Date());  
  62.         }  
  63.         final long end1 = System.currentTimeMillis();  
  64.         System.out.println(end1 - start1);  
  65.     }  
  66.   
  67.     public static void main(String[] args) {  
  68.         final int preheatCount = 0;  
  69.         final int runCount = 100000;  
  70.         // 分别单独运行两个测试方法  
  71.         // testJoda(init, runCount);  
  72.         testCalendar(preheatCount, runCount);  
  73.     }  
  74. }  

 

测试具体数据就不贴出来了(别骂我,每个机器都不大一样,自己跑一下,很快的),

结论:

jodatime在预热10000次后 运行效率远高于JDK自带的Calendar。

但是未预热时,运行次数小于1000时,JDK自带的Calendar稍快一些。

一般系统对于时间的处理都会大于1000次,大型一点的系统一般都有预热程序。

 

分析:

sun的jvm的实现,会将运行到一定次数的代码进行本地化编译,进行本地化编译后效率大大提高。