Questo fa parte della risposta sullo stack e l'heap in Java:
So, why have the stack or the heap at all? For things that leave scope, the stack can be expensive. Consider the code:
void foo(String arg) { bar(arg); ... } void bar(String arg) { qux(arg); ... } void qux(String arg) { ... }
The parameters are part of the stack too. In the situation that you don't have a heap, you would be passing the full set of values on the stack. This is fine for "foo" and small strings... but what would happen if someone put a huge XML file in that string. Each call would copy the entire huge string onto the stack - and that would be quite wasteful.
Questo è ciò che ho letto in Java Java Virtual Application Specification SE 8 Edition (Capitolo 2.5.2 Stack di Java Virtual Machine):
It [Java Virtual Machine stack] holds local variables and partial results, and plays a part in method invocation and return.
Quello che so è che quando passo un riferimento come parametro a un metodo, viene creata una variabile locale all'interno del metodo. La variabile locale contiene lo stesso riferimento della variabile passata. Ad esempio, qualcosa di simile
void foo(Bar bar) {
// Do something with bar
}
diventa qualcosa di simile a questo:
void foo(Bar bar) {
Bar localBar = bar;
// Do something with localBar
}
Quindi la mia domanda è:
Java copia i parametri del metodo nello stack frame del metodo chiamato? Da la risposta a cui mi riferisco all'inizio della pagina, capisco che siano copiati, ed è una copia profonda. Quasi sicuro, mi sbaglio.