La maggior parte dei programmatori concorda sul fatto che la garbage collection è una grande cosa, e nella maggior parte delle applicazioni vale la spesa. Tuttavia, la mia osservazione personale è che la gestione della memoria per la maggior parte degli oggetti è banale, e forse il 10% -20% di loro spiega la necessità di kludges come il conteggio dei riferimenti e schemi di gestione della memoria davvero complicati in generale. Mi sembra che uno possa ottenere tutti i benefici della garbage collection con solo una piccola parte dell'overhead eliminando in modo conservativo grandi oggetti manualmente dove la vita dell'oggetto è ovvia e lasciando che il GC raccolga il resto, assumendo che l'implementazione GC supporti tale cosa . Ciò consentirebbe al GC di funzionare molto meno frequentemente e di consumare meno memoria in eccesso, evitando allo stesso tempo casi che sono difficili da gestire manualmente. Ancora più interessante sarebbe se il compilatore inserisce automaticamente le istruzioni di eliminazione deterministici in cui vite erano evidenti:Una regola 90/10 per la gestione della 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;
}
Naturalmente, questo non potrebbe funzionare bene con un GC copia, ma per il bene di questo post supponiamo nostro ISN GC copiare. Perché tali schemi di gestione della memoria ibrida sono apparentemente così rari nei linguaggi di programmazione tradizionali?
Le vaghe affermazioni sull'osservazione personale non aiutano gli altri programmatori. Cosa hai * misurato *? –