Perché le piattaforme mobili non supportano la garbage collection generazionale?

11

Sia Windows Phone / Xbox che Android non hanno il supporto per la raccolta dei dati generazionali. Questo è frustrante per molti programmatori. Sembra esserci un motivo ingegneristico legittimo, ma non riesco a capirlo.

I telefoni attuali hanno più memoria e probabilmente CPU migliori rispetto ai desktop / laptop che eseguono .NET 1.1 con GC generazionale nel 2001, e non riesco a pensare ad alcun motivo per cui i processori ARM sarebbero peggiori al GC generazionale rispetto a x86. C'è anche meno bisogno di multitasking su telefoni e console, quindi c'è spazio di heap libero relativamente più.

Quindi cosa dà?

Modifica: alcuni punti per chiarire:

  • Queste piattaforme utilizzano esclusivamente la garbage collection per le app, quindi la mia domanda non riguarda il motivo per cui GC non è supportato; la mia domanda riguarda perché la garbage collection generazionale non è.
  • La ragione per cui le persone sono frustrate per la mancanza di GC generazionale è che la GC non genrativa è estremamente inefficiente. (Ciò significa che la durata della batteria non è la ragione.)
  • Credo che ci sia un motivo tecnico onesto per la mancanza di supporto GC generazionale. Questa non è una domanda retorica.
posta Rei Miyasaka 07.02.2012 - 23:54
fonte

3 risposte

5

Penso che il problema più grande sia la durata della batteria. La garbage collection è una convenienza per lo sviluppatore acquistata al prezzo di ulteriori cicli della CPU sul computer dell'utente . Quando la tua CPU è collegata (desktop) o ha una batteria relativamente grande (laptop), i tuoi utenti sono più disposti a pagare per la convenienza degli sviluppatori con l'energia aggiuntiva consumata dalla CPU mentre si fa la garbage collection. Quando la batteria è relativamente piccola, gli utenti potrebbero non essere così generosi. Potrebbero volere quel bar in più per loro stessi - forse per parlare con i loro amici, o per uccidere qualche maiale in più in un incontro mortale con uccelli arrabbiati.

Indipendentemente dalle ragioni degli utenti, gli sviluppatori del sistema operativo non vogliono creare una percezione che i dispositivi che eseguono il proprio sistema operativo scarichino la batteria più velocemente di quelli che eseguono il sistema operativo della concorrenza. Quindi acquistano una migliore percezione della durata prevista della batteria dei loro dispositivi al prezzo della convenienza degli sviluppatori: per loro, il tuo dolore non è un grosso problema, purché gli utenti siano soddisfatti dei dispositivi.

    
risposta data 08.02.2012 - 00:01
fonte
3

La mia ipotesi migliore sarebbe che non si tratta di un motivo tecnico, ma che gli sviluppatori di quelle piattaforme telefoniche non si sono ancora impegnati nello sforzo. So che non è la risposta che speri, ma se hai fatto qualche sviluppo su mobile probabilmente avrai notato che c'è un molto di frutta bassa. Probabilmente non hanno avuto il tempo di scrivere più implementazioni di GC, ottimizzarle tutte e selezionare quella che fa meglio. Perché qualcuno dovrebbe passare il tempo a reinventare la ruota quando potrebbe rilasciare nuove API appariscenti e appariscenti? ;)

FWIW, e come conferma della mia teoria, il nuovo runtime di Android (ART) ha una generazionale GC e sono che prevedono di avere un GC di compattazione in futuro .

    
risposta data 14.08.2014 - 22:59
fonte
2

C'è un costo aggiuntivo per la garbage collection generazionale.

Il collezionista generazionale deve essere in grado di scoprire quando gli oggetti più vecchi puntano a oggetti più recenti. Non possiamo rintracciare l'oggetto più vecchio per trovare questi casi perché ciò avrebbe vanificato lo scopo della raccolta generazionale. Invece, abbiamo in qualche modo bisogno di rilevare quando ciò accade e prenderne nota per la fase di raccolta. Indipendentemente da come lo farai, aggiungerà un po 'di overhead al processo di raccolta.

Su un sistema desktop, il tuo sistema operativo sta facendo tutto il possibile con la memoria dietro le quinte. Supporta funzionalità come la condivisione di pagine tra processi, la scrittura di pagine inutilizzate su disco, la mappatura della memoria tra processi, ecc. La mia comprensione è che alcune delle funzionalità utilizzate là consentono di monitorare in modo più efficiente i puntatori che vengono modificati. L'operazione è già preoccupante per ciò che si sta modificando in memoria, quindi l'utilizzo di tali informazioni per nuovi scopi non è un problema.

Ho il sospetto che i sistemi mobili non stiano facendo tutte le stesse cose dietro le quinte. Di conseguenza, non hanno lo stesso livello di informazioni che avrebbe un desktop. Di conseguenza, l'overhead coinvolto nell'implementazione di una raccolta generale è più alto e meno probabile che valga la pena.

    
risposta data 08.02.2012 - 02:37
fonte

Leggi altre domande sui tag