Java局部变量vs全局字段 - 性能

时间:2015-07-07 05:33:44

标签: java spring web-services class global-variables

我有一个私有方法,它将日期作为String类型并返回具有特定格式的XMLGregorianCalendar对象。正在从同一类中的各种其他方法调用此方法。 定义为SimpleDateFormat的格式,对于每次调用都是相同的。以下是该方法的两个版本。

版本1:

private XMLGregorianCalendar getXmlGregorianCalendar(final String strDt) throws ParseException, DatatypeConfigurationException{
        Date date = null;
        // local variable dtFormat
        DateFormat dtFormat = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss");
        if (strDt != null) {
            date = dtFormat.parse(strDt);
            GregorianCalendar cal = new GregorianCalendar();
            cal.setTime(date);
            XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal);
            return xmlCal;
       }else {
           return DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
       }
    }

版本2:

// declare date format once, global variable
private DateFormat dtFormat = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss");

// getter setter for dtFormat

private XMLGregorianCalendar getXmlGregorianCalendar(final String strDt) throws ParseException, DatatypeConfigurationException{
        Date date = null;
        if (strDt != null) {
            date = this.dtFormat.parse(strDt); // of course, getDtFormat() can be used
            GregorianCalendar cal = new GregorianCalendar();
            cal.setTime(date);
            XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal);
            return xmlCal;
       }else {
           return DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
       }
    }

版本1与版本2.哪种性能更好?

注意:附带的类注释为@Component,并参与为我的网络服务创建响应。

2 个答案:

答案 0 :(得分:0)

SimpleDateFormat不是线程安全的,所以这是需要考虑的事情。性能与这个问题几乎没有关系,除非你真的没有任何其他的性能热点(这会令人惊讶)。

然而,您可以使用ThreadLocal SimpleDateFormat,但请记住ThreadLocals有自己的问题,这可能并不重要。

答案 1 :(得分:0)

如果SimpleDateFormat是常量,您可以将其设为static final,这样可以稍微改善您的表现。但是你应该知道类中static字段的概念。 static字段在内存中为@Component类的所有实例分配一次。因此,如果这不能在代码中创建错误,最好使用static final关键字将其定义为常量。