日期:2014-05-16  浏览次数:20787 次

友善之臂Micro2440下的Embedded Linux中Java遇到的问题

最近在做一个项目中使用了友善之臂Micro2440,其中系统使用的是Embedded Linux。遇到了一个问题,就是程序运行非常的缓慢。

开始以为是读写文件的问题,于是测试过将数据写到excel中、sqlite数据库中、csv文件中,结果都是不行。

也曾经以为是JVM的内存不够,后来设置-Xms16m -Xmx32m,结果还是不行。

最后经过测试发现,居然是SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");这行代码运行特别的缓慢。每次执行居然需要2~3s的时间,后来没有办法,使用了自己写的时间对象和字符串对象的转换函数。终于将这个问题解决了。这里将代码写出来与大家共享。

package com.ps;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class TimeFormatProcess {
    /*
     * 功能:将形如“ 2012-08-02 22:56:00”的字符串(字符串长度19)
     * 转换为Calendar类,并返回一个Calendar对象
     * 作者:YOUYOU
     * 备注:该函数配合运行于Micro2440上的Embedded Linux
     * 因为SimpleDateFormat 类在Embedded Linux平台上响应
     * 太慢(2~3秒)
     */
    public static Calendar praseStringToCalendar(String strCalendar) {
        String strYear = null;
        String strMonth = null;
        String strDay = null;
        String strHour = null;
        String strMinute = null;
        String strSecond = null;
        int iYear = 0;
        int iMonth = 0;
        int iDay = 0;
        int iHour = 0;
        int iMinute = 0;
        int iSecond = 0;

        strYear = strCalendar.substring(0, 4);
        iYear = Integer.valueOf(strYear);
        // System.out.println(iYear);

        strMonth = strCalendar.substring(5, 7);
        iMonth = Integer.valueOf(strMonth);
//        System.out.println(iMonth);

        strDay = strCalendar.substring(8, 10);
        iDay = Integer.valueOf(strDay);
        // System.out.println(iDay);

        strHour = strCalendar.substring(11, 13);
        iHour = Integer.valueOf(strHour);
        // System.out.println(iHour);

        strMinute = strCalendar.substring(14, 16);
        iMinute = Integer.valueOf(strMinute);
        // System.out.println(iMinute);

        strSecond = strCalendar.substring(17);
        iSecond = Integer.valueOf(strSecond);

        // System.out.println(iSecond);


        Calendar calTemp = new GregorianCalendar(iYear, iMonth, iDay, iHour, iMinute, iSecond);
        return calTemp;
    }
    
    /*
     * 功能:将一个Calendar对象转化为形如“ 2012-08-02 22:56:00”的
     * 字符串(字符串长度19),并返回一个String对象
     * 作者:YOUYOU
     * 备注:该函数配合运行于Micro2440上的Embedded Linux
     * 因为SimpleDateFormat 类在Embedded Linux平台上响应
     * 太慢(2~3秒)