第一次使用时,Jodatime的LocalDateTime很慢

chz*_*gla 17 java jodatime

我目前正在java项目中测试一些webapp技术,并且想知道为什么页面有时会加载很快,有时需要花费近5秒来加载.

我终于发现它就是这条线

LocalDateTime now = new LocalDateTime();

当它第一次被调用时,需要永远获得当前时间.在那之后调用时,即使是完全不同的地方,它也会非常快.

我正在使用

    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>1.6.2</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

有没有人有类似的经历?真的卡在这里..我可以在我的应用程序的早些时候使用LocalDateTime来紧固后续调用 - 但这似乎相当沉闷.

编辑

我现在误用了Spring:

@Service
public class JodaTimeLoader {

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

}
Run Code Online (Sandbox Code Playgroud)

Jod*_*hen 12

Joda-Time专为长期运行的企业系统而设计,与其他应用程序中的更快性能相比,一次性前端加载时间无关紧要.


Don*_*ows 9

第一次执行此操作时,Joda Time会加载许多静态资源(例如,其年代描述符),这是您所看到的成本.这是一次性费用; 你按程序支付一次.如果真的困扰你,请在启动时尽早加载它,也许是这样的:

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

  • @bestsss:你认真地认为把它放在另一个线程中会更好吗?在应用程序设置期间显式实例化,我可以看到这是一个合理的事情.然而,添加额外的线程只是为了一次性成本可能只需100毫秒就可以解决问题,特别是在您已经获得了相当多的峰值资源争用时. (2认同)

Pet*_*rey 6

我的系统大约需要77毫秒.这对于一堂课而言相当长.

也许你只需要在启动时调用它一次以确保它已经加载.

如果您想快速获得当前时间,可以使用System.currentTimeMillis(); 我第一次打电话时需要0.0018毫秒.