La compensación de movimiento vs. no movimiento es compleja. No conozco ningún estudio en particular sobre el aspecto que mencionas; de hecho, no estoy seguro de entenderlo por completo: un GC preciso siempre necesita saber dónde están todos los indicadores, así que quizás estés hablando de conservador GC no móvil? Conservative GC en mi opinión es una mala elección si tienes suficiente control sobre la ruta de compilación para poder hacer un GC preciso.
Los otros aspectos que afectan al rendimiento de mover vs GC no se mueve son: Velocidad de
asignación. GC no móvil podría tener que asignarse desde una lista libre, mientras que el GC compulsivo puede usar la asignación de bump-puntero. Los esquemas híbridos como Immix intentan lograr una mejor compensación entre los dos.
Comportamiento de la localidad y el caché. Hay muchos estudios sobre esto para GC tanto móvil como no móvil; ver el GC Bibliography. En general, la compactación es buena para la memoria caché, aunque la copia de GC suele ser de amplitud, lo que es una mala elección (los patrones de acceso tienden a ser primero en profundidad), por lo que hay una gran cantidad de investigación en esta área tratando de reorganizar objetos para que coincidan con el patrón de acceso .
Mi opinión personal es que para apoyar la asignación muy rápido que necesita un vivero-L2 tamaño con la colección de la copia y bump-puntero de asignación. Si hace algo más, la asignación se vuelve más costosa, lo que distorsiona muchas cosas: la optimización para reducir las asignaciones se vuelve más importante, por lo que termina gastando esfuerzos allí y haciendo las cosas más complejas. Prefiero hacer la asignación realmente muy barata y luego no preocuparme por eso.
también intente en http://cstheory.stackexchange.com/ – oluies
¿Están interesados en las mediciones de rendimiento allí? –