Pregunta

¿Es posible decirle a la JVM que sugiera al sistema operativo que un determinado objeto no debería ser expulsado para intercambiar espacio?

¿Fue útil?

Solución

La respuesta corta es no.

Java no le permite ningún control sobre lo que se intercambia y lo que se "fija" en la RAM.

Preocuparse por este tipo de cosas suele ser una señal de que hay algo más en tu proyecto. En general, el sistema operativo hará un trabajo mucho mejor para determinar qué debe intercambiarse y qué no. Su trabajo consiste en escribir su software de manera que no intente adivinar qué hará el VM / OS subyacente, solo concéntrese en entregar sus características y un buen diseño.

Otros consejos

Este problema también se ha notado mucho en Eclipse y en el complemento de pirateo sucio KeepResident ( http: // suif.stanford.edu/pub/keepresident/ ) lo evita.

¿Podría ser un buen lugar para comenzar? No lo he visto en uso generalizado, ¿tal vez esto se ha integrado en la distribución estándar de Eclipse?

Hey! Estás programando en un lenguaje gestionado. ¿Por qué estás pensando en esto? Si no puede sacar estas cosas de la cabeza, siempre puede elegir programar en C.

La respuesta corta es (como se indicó anteriormente): "No lo hagas :-).

Sin embargo, sería posible en principio. La mayoría de los sistemas operativos permiten " bloquear " ciertas áreas de memoria se pueden cambiar (por ejemplo, mlock (2) en Linux, VirtualLock en Windows ).

La máquina virtual podría exponer esta funcionalidad a las aplicaciones Java a través de una API adecuada. Sin embargo, ninguna VM que conozco hace eso, así que para hacerlo, primero tendría que modificar su VM ...

Si accede a él regularmente, la página en la que se encuentre (la JVM mueve cosas durante la recolección de basura) no se pagará a menos que otra cosa esté solicitando memoria de manera aún más agresiva. Pero no hay forma de decirle a la JVM que no la mueva a otra página, y el sistema operativo solo conoce las páginas.

No es una respuesta, pero sin puntos para comentar, reservo esta opción :)

Hay razones para no almacenar información en swap. Ya sean contraseñas u otra información confidencial que no debe pasar la eternidad en el disco. Además, después de un fin de semana en mi PC, me gustaría tener algunas cosas en la memoria disponibles de inmediato.

(No Java) De forma nativa, es probable que haya alguna forma de hacer esto para cada uno de los sistemas operativos. Con las ventanas esto es definitivamente posible. Pero no directamente de java (piense JNI). Dependiendo de lo desesperada que sea esta opción, siempre puede mirar usando la memoria de video o algún otro dispositivo de hardware que no se intercambie. Esto le permite seguir utilizando una api java estándar, como jogl para almacenar información. Pero de alguna manera dudo que esté en contexto con la implementación / resultados que está buscando.

Básicamente, desea mantener la JVM completa en la memoria principal todo el tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top