2010-05-28 14 views
10

Mi chiedo quali sono le differenze o se è uguale per entrambe.Come viene eseguita la raccolta dei dati inutili in Java e come si confronta con .net?

+1

Le persone che voteranno per chiudere questa domanda come "non una vera domanda" si preoccuperanno di spiegare le loro motivazioni? Non è come se il ragazzo avesse 100 rappresentanti. – Josh

+0

La parte 1 ("come funziona gc in Java") è stata coperta da dozzine di domande su SO. –

+0

@Andreas per citare Dylan "Se c'è un pensiero originale là fuori, potrei usarne uno proprio adesso." Ormai ogni domanda è stata posta su SO. Ma se la gente vuole chiuderla come duplicato, almeno scegli quella opzione dal menu perché fornisce i riferimenti OP agli altri post. – Josh

risposta

1

Ho trovato questo link dal mio altro question on SO che risponde un po 'alle differenze di garbage collection in Java e .NET/C# . Per gli altri che stanno cercando questo tipo di informazioni, ecco:

In oggetti Java vengono creati nell'heap utilizzando la nuova parola chiave. La maggior parte delle classi in C# vengono create nell'heap utilizzando la nuova parola chiave. Anche solo come JVM gestisce la distruzione di oggetti lo fa anche il CLR tramite un Marco e la raccolta dei rifiuti Compact algoritmo

NOTA: C# supporta anche stack-based classi, chiamate i tipi di valore, che sono discusso più sotto.

+0

http://www.brpreiss.com//books/opus5/html/page428.html ha buone informazioni e algoritmo Marc e compatto. –

1

Suppongo che non ci sia alcuna differenza concettuale. Poiché i modelli di memoria sono leggermente diversi (for example volative difference), la realizzazione può variare.

+1

Forse nessuna differenza concettuale su un livello elevato (ad esempio, la garbage collection su entrambe le piattaforme ha la stessa funzione - ripulire gli oggetti che non sono più referenziati), ma ci sono diversi algoritmi per fare questo, quindi ci sono grandi differenze in implementazione, anche tra le diverse versioni di JVM di Sun, ad esempio. – Jesper

+0

IMHO se hai bisogno di preoccuparti di come funziona il GC nel 99% significa che non hai affatto bisogno di GC. –

2

Questa domanda non è responsabile.

In primo luogo, nessuna delle specifiche pertinenti dirà nulla su in cui Java o .net dovrebbe implementare la garbage collection. Quindi non c'è letteralmente "il modo in cui GC è fatto" in Java o in .net.

In secondo luogo, i dettagli di come GC viene implementato differiscono rispettivamente tra i vari fornitori per Java e .net, e per qualsiasi fornitore il GC può cambiare con ciascuna piattaforma, ogni versione principale, versione secondaria e anche ogni versione di patch. Inoltre, alcune implementazioni di Java consentono di scegliere tra diversi garbage collector utilizzando le opzioni della riga di comando.

Infine, non importa in che modo il GC è implementato in un'implementazione Java o .net fornito che può essere eseguito per funzionare come richiesto dall'applicazione. E per Java, la risposta è che può funzionare per la maggior parte dei tipi di applicazioni. (Le eccezioni sono tipicamente sistemi/applicazioni con rigidi requisiti in tempo reale o vincoli di memoria molto stretti.)

+0

Ma per alcune nozioni di base e nozioni di base: http://stackoverflow.com/questions/2910224/java-garbage-collection/2922042#2922042 –

+0

@Andreas_D - ci sono descrizioni più dettagliate del GC Java rispetto a quella a cui si fa riferimento. E entrambe le pagine di riferimento sono vecchie. I GC Java sono decisamente cambiati in modo significativo dal 1.4.1. –

Problemi correlati