Ogni volta che una classe viene caricata, quali sono memorizzati nell'heap e quali sono memorizzati nello stack?JVM - Heap and Stack
Anche dove risiedono i thread?
Ogni volta che una classe viene caricata, quali sono memorizzati nell'heap e quali sono memorizzati nello stack?JVM - Heap and Stack
Anche dove risiedono i thread?
I tipi di riferimento sono in heap.
Qualsiasi tipo primitivo di dati e riferimenti a valori su heap (parametri/variabili locali del metodo) sono in pila.
Ogni thread ha il proprio stack.
Tutti i thread nell'applicazione condividono lo stesso heap.
E 'davvero facile:
Nota che variabili locali possono solo riferimenti hold ("puntatori") o valori primitivi. Una variabile locale non può mai contenere "un oggetto".
Si noti che questa vista è ciò che è definito nella specifica JVM. Una JVM concreta può allocare oggetti in un'area non heap se lo desidera. Ad esempio: se sa che un oggetto appena creato non fugge mai dall'invocazione corrente, allora potrebbe mettere l'oggetto istanziato nell'area dello stack. Tuttavia, questa è una ottimizzazione che non è visibile allo sviluppatore.
Primitives: Pila
oggetti: Mucchio
Discussioni: una pila separata, mentre condividere lo stesso mucchio.
non sono i primitivi memorizzati nell'heap se sono variabili di istanza? e in pila se sono variabili locali? – Mike
@Joachim Sauer
Se quello che dici è vero, allora perché, nel codice seguente,
class Student{
int age; //instance variable
String name; //instance variable
public Student()
{
this.age = 0; //local variable and member of an object
name = "Anonymous";
}
Allora perché non è 'name = "Anonymous"; 'una variabile locale ?? Che tipo di variabile è e dove vive?
@Nirmal: Non è niente di strano. È lo stesso comportamento in tutti i runtime sia nel runtime C/C++ che in altro. Quindi, non capisco davvero "perché" il "perché" dalla tua parte :) –
"Qualsiasi tipo di dati primitivi ... sono in pila" è un po 'di confusione. L'heap memorizza le primitive se sono membri di dati di oggetti. –
Sì. Lo fa .. ma poi, come hai detto, come parte di Composites. Tuttavia, nel momento in cui accediamo ai dati, viene prima copiato nello stack. Ad esempio, per un oggetto con definizione ComplexNumber {float real, float imaginary}, in un metodo doWork (ComplexNumber cn} {return cn.real * cn.real + float.imaginary * float.immaginario; } i valori real/imaginary vengono prima portati nello stack unline cn dove solo il riferimento è portato nello stack –