2011-06-08 10 views
14

Actualmente estoy probando algunas tecnologías de aplicaciones web en un proyecto Java y me preguntaba por qué las páginas a veces cargan rápido y algunas veces tardan casi 5 segundos en cargarse.LocalDateTime de Jodatime es lento cuando se usa por primera vez

finalmente descubrí que es esta línea

LocalDateTime now = new LocalDateTime();

Cuando se llama la primera vez, se necesita siempre para obtener la hora actual. Cuando se invoca después de eso, incluso en un lugar completamente diferente, es bastante rápido.

actualmente estoy usando

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

Alguien ha tenido alguna experiencia similar? Realmente atascado aquí ... Podría usar LocalDateTime un tiempo antes en mi aplicación para agilizar las llamadas subsiguientes, pero esto parece bastante aburrido.

EDITAR

hago mal uso de la primavera para eso:

@Service 
public class JodaTimeLoader { 

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

} 

Respuesta

8

La primera vez que lo hace, Joda Time carga una cantidad de recursos estáticos (por ejemplo, su chronology descriptors) que es el costo que está viendo. Este es un costo único; lo paga una vez por proceso. Cargarlo temprano durante el arranque si realmente le molesta, tal vez así:

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

Ok, gracias por su respuesta detallada. Pero creo que ya no usaré jodatime, realmente no puedo ver ninguna ventaja en este momento. ¿Cargan sus recursos con entusiasmo en sus entornos productivos? – chzbrgla

+0

haciendo eso, precargando recursos, en el inicializador estático es una muy mala idea. lo que quiere hacer es delegar la carga en otro hilo y orar para que nadie intente usarlo. De cualquier forma, tomar 0,1 segundos para cargar es un diseño muy malo. – bestsss

+2

@bestsss: ¿En serio piensas que simplemente ponerlo en otro hilo es mejor? Ejemplificación explícita durante la configuración de la aplicación, puedo ver que es una cosa razonable de hacer. Sin embargo, agregar hilos adicionales para derribar quizás 100 ms de un costo por única vez es solo pedir problemas, especialmente en un punto en el que ya tienes bastante contención de recursos pico. –

6

Se tarda unos 77 ms en mi sistema. Eso es bastante largo para una clase.

Quizás solo deba llamarlo una vez al inicio para asegurarse de que ya está cargado.

Si desea la hora actual rápidamente, puede usar System.currentTimeMillis(); que toma 0.0018 ms la primera vez que lo llamo.

+0

Ya ... pero realmente no me gusta esto 'cárgalo al principio para que se cargue más rápido más tarde'-acercamiento: p Pero gracias por el punto de referencia del milli segundo método ... tal vez solo recurriré a eso - no más Jodatime entonces ...: D – chzbrgla

10

Joda-Time está diseñado para sistemas empresariales de larga ejecución en una sola vez por adelantado el tiempo de carga es irrelevante en comparación con el rendimiento más rápido durante el resto de la aplicación.

Cuestiones relacionadas