Debido a Generational Collection, tengo que decir que el seguimiento y la copia son no grandes cuellos de botella para GC.
Lo que ayudaría, son las barreras LEAD asistidas por hardware que eliminan la necesidad de pausas 'detener el mundo' cuando se hacen escaneos de pila y se marca el montón.
Azul Systems ha hecho esto: http://www.azulsystems.com/products/compute_appliance.htm Ofrecieron una presentación en JavaOne sobre cómo sus modificaciones de hardware permitieron GC sin pausa.
Otra mejora serían las barreras de escritura asistidas por hardware para realizar un seguimiento de los conjuntos recordados.
GC Generacionales, y más aún para G1 o Garbage First, reducen la cantidad de almacenamiento que tienen que escanear solo escaneando una partición y manteniendo una lista de conjuntos recordados para punteros de partición cruzada.
El problema es que CUALQUIERA vez que el mutador (palabra de lujo para el "programa real") establece un puntero, también tiene que poner una entrada en el conjunto apropiado recordado. Así que tienes (pequeña) sobrecarga incluso cuando no estás haciendo GC. Si puede reducir esto, reduciría los tiempos de pausa necesarios para GCing y el rendimiento general del programa.
el camión de basura que viene por mi casa recoge y vacía el bote de basura por sí mismo. ¿Eso cuenta? – kenwarner
Me pregunto si esto permitiría GC de todo el sistema - imagine que no tiene partición de proceso (y por extensión el desperdicio de la fragmentación, y el espacio vacío reservado distribuido para la nueva asignación). Instale la validación de tiempo del software y la capacidad de pasar objetos entre aplicaciones sin copiar. Me gustan los habilitadores. La asistencia de hardware podría incluir mediciones estadísticas en curso para encontrar bloques de memoria fríos, así como el recuento de referencias. – Todd