Java teoria e pratica: Garbage Collection nella 1.4.1 JVM

May 3

Gli sviluppatori hanno creato Java con due obiettivi primari in mente. In primo luogo, per creare un linguaggio di programmazione interamente costruito seguendo un paradigma orientato agli oggetti. In secondo luogo, per rendere il linguaggio Java eseguito sulla parte superiore della Java Virtual Machine (JVM) per garantire la portabilità cross platform. Perché Java correva sulla JVM e non si interfaccia direttamente con l'hardware, la JVM potrebbe gestire molti dei problemi inerenti alla programmazione orientata agli oggetti, vale a dire la gestione della memoria. Il processo attraverso il quale la JVM ha gestito la memoria è chiamato "garbage collection". Per comprendere la raccolta, un programmatore deve capire concetti di programmazione orientata agli oggetti, compreso il modo di memoria viene gestita.

Programmazione orientata agli oggetti

programmazione orientata agli oggetti (OOP) rappresenta un paradigma di programmazione in cui i programmatori di creare i dati di "oggetti" come parte del loro codice. I programmatori usano questi oggetti per rappresentare tipi di dati complessi che contengono sia uno Stato e presentano certi comportamenti. Così, per esempio, un programmatore di creare una classe "Sphere" per un programma che fa lavori che comportano calcoli di sfere. La classe Sphere potrebbe contenere dati per un raggio (il suo stato) e una funzione per calcolare la propria area (il comportamento).

Oggetti e Memoria

Sia Java e C ++ sono linguaggi OOP. Tuttavia, la differenza tra i due illustra la necessità di raccolta dei rifiuti in Java. In C ++, un programmatore offerte direttamente con il sistema operativo. Ciò significa che quando un programmatore vuole creare un oggetto, che può fare una delle due cose. In primo luogo, si può creare una copia "superficiale" durante il processo di codifica. In secondo luogo, e più comune, si può scrivere codice che crea oggetti dinamicamente nella memoria "profonda" durante l'esecuzione di codice attraverso l'uso di "puntatori".

Puntatori e perdite di memoria

Un programma C ++ utilizza puntatori per allocare la memoria durante l'esecuzione di codice. A "pointer" contiene un riferimento a una posizione di memoria. Quando un programmatore ha bisogno di progettare il codice che crea gli oggetti in fase di esecuzione, che usa i puntatori di riferimento della memoria di mettere da parte per la creazione di oggetti. Questo puntatore è quindi l'unica cosa che fa riferimento a tale oggetto. Se il programma di spostare il riferimento di puntatore durante l'esecuzione, l'oggetto "ha indicato" non può più essere utilizzato. Si trova semplicemente in memoria e non c'è modo per accedervi. Quando grandi quantità di oggetti vengono creati tramite puntatori e lasciati nella memoria a causa della perdita di riferimento di puntatore, questo è noto come "perdita di memoria" e può causare seri problemi in un programma.

Raccolta dei rifiuti

In C ++, la responsabilità di gestire la memoria e prevenire perdite di memoria ricade sul programmatore. Il linguaggio Java, a differenza di C ++, gira su JVM, estratta dal sistema operativo. A causa di questo, il programmatore può ignorare gestione della memoria di sistema per quanto riguarda gli oggetti. Piuttosto, la JVM mantiene le linguette su oggetti e riferimenti esistenti, ed elimina quelli che non sono più in uso. In questo modo, il compito di gestire la memoria cade sulla JVM, e il programmatore può lavorare su diversi compiti, mentre fiduciosi che la gestione della memoria è preso cura di.

Garbage Collection e al 1.4.1 JVM

La versione 1.4.1 del JVM offre un modello per la raccolta dei rifiuti. La JVM utilizza un paradigma divisione di età, mentre gli oggetti "giovani" e gli oggetti "vecchi" esiste in memoria. La JVM può promuovere giovani oggetti a oggetti vecchi a base di come spesso i giovani oggetti vengono copiati durante l'esecuzione del programma. Vecchi oggetti, poi, sono considerati importanti e, quindi, non contrassegnato per la cancellazione. Il sistema di raccolta dei rifiuti 1.4.1 JVM utilizza un metodo "treno" di raccolta / eliminazione, consentendo aumentando piccola raccolta dei rifiuti passa piuttosto che, collezioni più lenti più grandi. Inoltre, la 1.4.1 JVM si avvale di sistemi di multiprocessing, offrendo garbage collection simultaneo su più processori.