La mayoría de los programadores coinciden en que la recolección de basura es una gran cosa, y en la mayoría de las aplicaciones vale la pena la sobrecarga. Sin embargo, mi observación personal es que la administración de la memoria para la mayoría de los objetos es trivial, y quizás 10% -20% de ellos representan la necesidad de kludges, como el recuento de referencias y los esquemas de administración de memoria realmente complicados en general. Me parece que uno puede obtener todos los beneficios de la recolección de basura con solo una pequeña fracción de la sobrecarga borrando conservativamente objetos grandes donde la vida del objeto es obvia y dejando que el GC recolecte el resto, suponiendo que la implementación de GC apoye tal cosa . Esto permitiría que el GC se ejecute con mucha menos frecuencia y consuma menos memoria excedente, al tiempo que se evitan casos que en realidad son difíciles de administrar de forma manual. Aún más interesante sería si el compilador inserta instrucciones delete deterministas automáticamente dónde vidas eran obvias:Una regla 90/10 para la gestión de memoria?
int myFunc() {
Foo[] foo = new Foo[arbitraryNumber]; // May be too big to stack allocate.
// do stuff such that the compiler can prove foo doesn't escape.
// foo is obviously no longer needed, can be automatically deleted here.
return someInteger;
}
Por supuesto, esto podría no funcionar bien con un GC copia, pero por el bien de este post vamos a asumir nuestra ISN GC copiando ¿Por qué estos esquemas híbridos de administración de memoria son aparentemente tan raros en los lenguajes de programación convencionales?
Las aserciones vagas sobre 'observación personal' no ayudan a otros programadores. ¿Qué has * medido *? –