¿Es posible marcar los objetos java no coleccionables desde la perspectiva de gc para ahorrar en el tiempo de barrido de gc?¿Es posible marcar los objetos java no coleccionables desde la perspectiva de gc para ahorrar en el tiempo de barrido de gc?
Algo a lo largo de las líneas de http://wwwasd.web.cern.ch/wwwasd/lhc++/Objectivity/V5.2/Java/guide/jgdStorage.fm.html y específicamente contenedores que no son de basura allí (no de basura-coleccionables?).
El problema es que tengo un montón de objetos temporales ordinarios, pero tengo incluso más grandes (varios Gigs) de objetos que se almacenan para fines de caché. Sin ninguna razón, el GC de Java atraviesa todos los gigabytes de caché que intentan encontrar algo para recopilar, ya que contienen datos en caché que tienen sus propios tiempos de espera.
De esta manera podría dividir mis datos de manera personalizada en objetos de vida infinita y de vida normal, y con suerte GC sería bastante rápido porque los objetos normales no viven tanto tiempo y equivalen a cantidades menores.
Hay algunas soluciones a este problema, como Apache DirectMemory de comercio y terracota BigMemory (http://terracotta.org/products/bigmemory), sino una solución de Java nativo serían más agradable (me refiero libre y probablemente más fiable ?). También quiero evitar la sobrecarga de serialización, lo que significa que debe ocurrir dentro de la misma JVM. A mi entender DirectMemory y BigMemory operan principalmente fuera del montón lo que significa que los objetos deben ser serializados/deserializados a/desde la memoria fuera de jvm. Simplemente marcar regiones que no sean de gc dentro de jvm parecería una mejor solución. El uso de Archivos para caché tampoco es una opción, tiene la misma sobrecarga de serialización/deserialización inalcanzable. El caso de uso es un servidor HA con muchos datos utilizados en orden aleatorio (humano) y con baja latencia.
¿Qué te hace pensar que BigMemory no es nativo de Java? Parece que lo que realmente quieres decir es ** gratis. ** –
Puedes usar la memoria directa para guardar tus datos en caché (lo cual está desactivado) He hecho esto para mantener 100s de GB fuera de montón. –
@PeterLawrey El uso de memoria directa no es una opción, ya que quiero evitar la sobrecarga de serialización, lo que significa que debe ocurrir dentro del mismo jvm. – Martin