La vida de un objeto Java

¿Cuál es la vida de un objeto Java al que se le pasa un argumento de método?

Por ejemplo tengo un objeto Test

class Test{

    public string testType(){
       .....
    }
}

y tengo dos clases A y B

class classA{

   classB b = new classB();

   void nextQuestion{
      b.start(new Test());
   }
}




class classB{
   void start(Test test){
      doSomething(test.testType());
   }
}

Entonces, ¿cuál es la vida del objeto de prueba? ¿Es solo hasta el final del método de inicio o estará vivo hasta el final de la clase B o mientras esté vivo hasta el final de la clase A o es algo más?

Respuesta 1

Permanecerá al menos hasta el final del start()método, porque se ha declarado allí, y ese es su alcance. Más allá de eso, su existencia está en manos del recolector de basura.


EDITAR:

Al final de start()quiero decir, hasta que ese método termine su ejecución. E incluso si realiza los cambios que ha mostrado, Objectel start()método todavía lo necesita, por lo que seguirá existiendo al menos hasta que finalice la ejecución del start()método, más allá de eso depende del recolector de basura.

Respuesta: 2

Su vida comienza cuando new Test()se llama, y ​​puede ser liberado por el recolector de basura en cualquier momento después de startque finalice el método, porque es demostrable en el momento de la compilación que nunca se usará después de ese punto.

Si el startmétodo fuera (por ejemplo) establecer un campo estático para referirse al objeto, el recolector de basura no podría recolectarlo hasta que se libere esa referencia:

private static Test lastTested;
...

void start(Test test){
   lastTested = test;
   doSomething(test.testType());
}
Respuesta: 3

Al definir una topología en flujos kafka, se puede agregar una tienda de estado global. Necesitará un tema fuente y un procesador de procesador. El procesador recibe registros y podría transformar teóricamente ...

Estoy experimentando con procesadores de anotaciones de Java. Puedo escribir pruebas de integración usando el "JavaCompiler" (de hecho, estoy usando "Hickory" en este momento). Puedo ejecutar el proceso de compilación y analizar ...

Estoy escribiendo un archivo STL que consiste en un encabezado de 80 bytes, un entero de 4 bytes, y luego registros de 50 bytes, cada uno compuesto por flotantes y un entero corto. Usando un RandomAccessFile puedo escribir fácilmente ...

las dos formas que sé para obtener la URL de la página son: 1.a través de la clase de applet: Applet.getDocumentBase () 2.a través de la biblioteca de JavaScript de netscape: JSObject.getWindow (this) .eval ("location.href") Primero, ...