Jodatime LocalDateTime работает медленно при первом использовании

В настоящее время я тестирую некоторые технологии webapp в проекте java и задаюсь вопросом, почему страницы иногда загружаются быстро, а иногда загружаются почти 5 секунд.

Наконец-то выяснилось, что именно эта строка

LocalDateTime now = new LocalDateTime();

Когда он вызывается в первый раз, требуется время, чтобы получить текущее время. Когда вызывается после этого, даже где-то совсем другое, это довольно быстро, однако.

В настоящее время я использую

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

У кого-нибудь был подобный опыт? Действительно застрял здесь.. Я мог бы использовать LocalDateTime некоторое время на раннем этапе моего приложения, чтобы закрепить последующие вызовы, но это кажется довольно скучным.

ИЗМЕНИТЬ

Я неправильно использую Spring для этого:

@Service
public class JodaTimeLoader {

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

}

Ответ 1

В первый раз, когда вы делаете это, Joda Time загружает несколько статических ресурсов (например, хронологические дескрипторы), которые являются затратами, которые вы видеть. Это разовая стоимость; вы платите его один раз за процесс. Загрузите его во время запуска, если это действительно вас беспокоит, возможно, вот так:

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

Ответ 2

Joda-Time предназначен для долгосрочных корпоративных систем, где одноразовое время загрузки на передний план не имеет значения по сравнению с более быстрой производительностью во время остальной части приложения.

Ответ 3

В моей системе требуется около 77 мс. Это довольно долго для класса.

Возможно, вам просто нужно вызвать его один раз при запуске, чтобы убедиться, что он уже загружен.

Если вы хотите, чтобы текущее время было быстро, вы можете использовать System.currentTimeMillis(); который принимает 0,0018 мс при первом вызове.