开发者

Jodatime's LocalDateTime is slow when used the first time

I'm currently testing out some webapp technologies in a java project and was wondering why the pages sometimes load fast and sometimes take almost 5s to load.

I finally found out that it is this line

LocalDateTime now = new LocalDateTime();

When it's called the first time, it takes forever to get the current time. When called after that, even somewhere completely different, it's pretty fast however.

I'm currently using

    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>1.6.2</version>
    </dependency>

Has anyone had any similar experience? Really stuck here.. I could use LocalDateTime some time early in my application to fasten up subsequent calls - but this seems pretty dull tho.

EDIT

I misuse Spring for that now:

@Service
public class JodaTi开发者_如何学CmeLoader {

  public JodaTimeLoader() {
    LocalDateTime loadMe = new LocalDateTime();
  }

}


Joda-Time is designed for long running enterprise systems where a one-off up front load time is irrelevant compared to the faster performance during the rest of the application.


The first time you do that, Joda Time loads a number of static resources (e.g., its chronology descriptors) which is the cost that you're seeing. This is a one-off cost; you pay it once per process. Load it early during startup if it really bothers you, perhaps like this:

static {
    // Build the local caches inside Joda Time immediately instead of lazily
    new LocalDateTime();
}


It takes about 77 ms on my system. That is quite long for a class.

Perhaps you just have to call it once on startup to make sure its already loaded.

If you want the current time quickly you can use System.currentTimeMillis(); which takes 0.0018 ms the first time I call it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜