PRN3 10 T11 Constructores
-
Upload
miguel-enigmah -
Category
Documents
-
view
17 -
download
0
Transcript of PRN3 10 T11 Constructores
29/09/2010
1
CLASES 2CLASES 2
Variables, Variables, métodosmétodos y y
clasesclases finalesfinales
IniciaciónIniciación de un de un objetoobjeto
DestrucciónDestrucción de de objetoobjetoRevisado: CICLO II/2010Revisado: CICLO II/2010
INDICEINDICE
Variables, métodos y clases finalesVariables, métodos y clases finales..
Iniciación de un objetoIniciación de un objeto..
�� ConstructorConstructor
�� Paso de objetos a métodosPaso de objetos a métodos
�� Asignación de objetosAsignación de objetos
�� Constructor copiaConstructor copia
Destrucción de objetosDestrucción de objetos..
�� Recolector de basuraRecolector de basura
29/09/2010
2
Variables, métodos y clases Variables, métodos y clases
finalesfinalesLas variables Las variables finalesfinales, generalmente se , generalmente se denominan también constantes simbólicas, denominan también constantes simbólicas, porque nunca cambian su valor.porque nunca cambian su valor.
Constante simbólicaConstante simbólica porque se le dice al porque se le dice al compilador el nombre de la constante y su valor.compilador el nombre de la constante y su valor.
Declarar una referencia Declarar una referencia finalfinal a un objeto supone a un objeto supone que esa referencia sólo pueda utilizarse para que esa referencia sólo pueda utilizarse para referenciar ese objeto.referenciar ese objeto.
Ejemplo:Ejemplo:
final Cfecha cumpleaños = new Cfecha();final Cfecha cumpleaños = new Cfecha();
Cfecha fecha = new Cfecha();Cfecha fecha = new Cfecha();
//...//...
cumpleaños = fecha; //error: referencia cte.cumpleaños = fecha; //error: referencia cte.
Declarar un método final supone que la clase se Declarar un método final supone que la clase se ejecute con más eficiencia, porque el ejecute con más eficiencia, porque el compilador puede colocar el código de bytes del compilador puede colocar el código de bytes del método directamente en el lugar del programa método directamente en el lugar del programa donde se invoque a dicho método, ya que se donde se invoque a dicho método, ya que se garantiza que el método no va a cambiar.garantiza que el método no va a cambiar.
29/09/2010
3
¿Quién puede cambiarlo? Una subclase que ¿Quién puede cambiarlo? Una subclase que intente redefinirlo, pero sólo podrá hacerlo si el intente redefinirlo, pero sólo podrá hacerlo si el método no es final.método no es final.
Haga un método final cuando necesite que la Haga un método final cuando necesite que la clase se ejecute con más rapidez, pero clase se ejecute con más rapidez, pero pensando en la limitación que está imponiendo pensando en la limitación que está imponiendo a las posibles subclases de esa clase.a las posibles subclases de esa clase.
Una Una clase clase también puede ser también puede ser finalfinal. Ejemplo:. Ejemplo:
public final class Cfecha {public final class Cfecha {
//... }//... }
Cuando una clase se declara final se esta Cuando una clase se declara final se esta impidiendo que de esa clase se puedan derivar impidiendo que de esa clase se puedan derivar subclases. Además todos sus métodos se subclases. Además todos sus métodos se convierten automáticamente en final.convierten automáticamente en final.
No hay muchas razones para hacer esto, ya que No hay muchas razones para hacer esto, ya que se sacrifica una de las características más se sacrifica una de las características más potentes de la POO: la reutilización del código.potentes de la POO: la reutilización del código.
29/09/2010
4
INICIACION DE UN OBJETOINICIACION DE UN OBJETO
¿Cómo se construye un objeto de una clase ¿Cómo se construye un objeto de una clase cualquiera?cualquiera? De forma análoga a como se De forma análoga a como se construye cualquier otra variable de un tipo construye cualquier otra variable de un tipo predefinido.predefinido.
Cfecha fecha = new Cfecha()Cfecha fecha = new Cfecha()
El compilador llama a un método de iniciación, El compilador llama a un método de iniciación, constructorconstructor, para iniciar cada una de las , para iniciar cada una de las variables declaradas, y a un método de variables declaradas, y a un método de eliminación, eliminación, destructordestructor, para liberar el espacio , para liberar el espacio ocupado por dichas variables, justo al salir. ocupado por dichas variables, justo al salir.
El compilador proporciona un constructor El compilador proporciona un constructor público por omisión para cada clase definida. público por omisión para cada clase definida. Este constructor será ejecutado después que el Este constructor será ejecutado después que el operador operador newnew, secuencial y recursivamente , secuencial y recursivamente reserve memoria para cada uno de los reserve memoria para cada uno de los miembros y los inicie. miembros y los inicie.
Igualmente, el compilador proporciona para Igualmente, el compilador proporciona para cada clase de objetos un método protegido por cada clase de objetos un método protegido por omisión, que será invocado justo antes de que omisión, que será invocado justo antes de que se destruya un objeto con el fin de permitir se destruya un objeto con el fin de permitir realizar tareas de limpieza y liberar recursos.realizar tareas de limpieza y liberar recursos.
29/09/2010
5
CONSTRUCTOR CONSTRUCTOR
Una forma de asegurar que los objetos siempre Una forma de asegurar que los objetos siempre contengan valores válidos es escribir un contengan valores válidos es escribir un constructor. constructor.
Un constructor es un método especial de una Un constructor es un método especial de una clase que es llamado automáticamente siempre clase que es llamado automáticamente siempre que se crea un objeto de la misma. Su función que se crea un objeto de la misma. Su función es iniciar nuevos objetos de su clase.es iniciar nuevos objetos de su clase.
Cuando se crea un objeto, Java hace lo Cuando se crea un objeto, Java hace lo siguiente:siguiente:�� Asigna memoria para el objeto por medio del Asigna memoria para el objeto por medio del
operador operador newnew..
�� Inicia los atributos de ese objeto, ya sea a sus Inicia los atributos de ese objeto, ya sea a sus valores iniciales (si los atributos fueron valores iniciales (si los atributos fueron iniciados en su propia declaración) o a los iniciados en su propia declaración) o a los valores predeterminados por el sistema: los valores predeterminados por el sistema: los atributos numéricos a ceros, los atributos numéricos a ceros, los alfanuméricos a nulos, y las referencias a alfanuméricos a nulos, y las referencias a objetos a objetos a nullnull..
�� Llama al constructor de la clase.Llama al constructor de la clase.
29/09/2010
6
Los constructores son métodos, admiten Los constructores son métodos, admiten
parámetros igual que éstos.parámetros igual que éstos.
Cuando en una clase no especificamos Cuando en una clase no especificamos
ningún constructor, el compilador añade ningún constructor, el compilador añade
uno público por omisión sin parámetros.uno público por omisión sin parámetros.
Un constructor por omisión de una clase Un constructor por omisión de una clase
es un constructor sin parámetros que no es un constructor sin parámetros que no
hace nada.hace nada.
El constructor por omisión es necesario, porque El constructor por omisión es necesario, porque será invocado cada vez que se construya un será invocado cada vez que se construya un objeto sin especificar ningún argumento, en objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores cuyo caso el objeto será iniciado con los valores especificados cuando se declararon los especificados cuando se declararon los atributos en su clase, o con los valores atributos en su clase, o con los valores predeterminados del sistema.predeterminados del sistema.
29/09/2010
7
Características del CONSTRUCTORCaracterísticas del CONSTRUCTOR
Un constructor Un constructor tiene el mismo nombretiene el mismo nombre que la que la clase a la que pertenece. Ejemplo: el constructor clase a la que pertenece. Ejemplo: el constructor de Cfecha se denomina también Cfecha.de Cfecha se denomina también Cfecha.
No se heredaNo se hereda
No puede retornar ningún valor (incluyendo No puede retornar ningún valor (incluyendo voidvoid))
No puede ser declarado No puede ser declarado final, static, abstract, final, static, abstract, synchronized o native.synchronized o native.
Salvo en casos excepcionales, debe declararse Salvo en casos excepcionales, debe declararse siempre público.siempre público.
Características del CONSTRUCTORCaracterísticas del CONSTRUCTOR
El constructor puede sobrecargarse.El constructor puede sobrecargarse.
Un constructor no puede ser invocado Un constructor no puede ser invocado directamente, pero si indirectamente a través de directamente, pero si indirectamente a través de this. this.
La llamada a un constructor solo puede La llamada a un constructor solo puede realizarse desde dentro de otro constructor de realizarse desde dentro de otro constructor de su misma clase y debe ser siempre la primera su misma clase y debe ser siempre la primera sentencia.sentencia.
29/09/2010
8
Ejemplo:Ejemplo:
public Cfecha (int dd) // constructorpublic Cfecha (int dd) // constructor
{{
this(); //invoca al constructor Cfecha sinthis(); //invoca al constructor Cfecha sin
//parámetros//parámetros
dia = dd;dia = dd;
if (!fechaCorrecta()) {if (!fechaCorrecta()) {
System.out.println(“Fecha incorrecta.”);System.out.println(“Fecha incorrecta.”);
asignarFecha(); }asignarFecha(); }
}}
Paso de objetos a métodosPaso de objetos a métodos
Formas como un argumento puede pasar Formas como un argumento puede pasar
a un método:a un método:
�� Llamada por valorLlamada por valor. Este método copia el valor . Este método copia el valor de un argumento dentro del parámetro formal de un argumento dentro del parámetro formal del método. Por tanto, los cambios hechos en del método. Por tanto, los cambios hechos en el parámetro del método no tienen efecto en el parámetro del método no tienen efecto en el argumento usado para llamarlo.el argumento usado para llamarlo.
29/09/2010
9
Paso de objetos a métodosPaso de objetos a métodos
�� Llamada por referenciaLlamada por referencia. En este método, una . En este método, una referencia a un argumento (no el valor del referencia a un argumento (no el valor del argumento) se pasa al parámetro. Dentro del argumento) se pasa al parámetro. Dentro del método esta referencia se usa para acceso al método esta referencia se usa para acceso al argumento actual especificado en la llamada. argumento actual especificado en la llamada. Quiere decir, que cambios hechos al Quiere decir, que cambios hechos al parámetro afectarán al argumento usado para parámetro afectarán al argumento usado para llamar la subrutina.llamar la subrutina.
Paso de objetos a métodosPaso de objetos a métodos
En java, cuando pasa un tipo simple, En java, cuando pasa un tipo simple,
como int o double, a un método, éste pasa como int o double, a un método, éste pasa
por valor. por valor.
¿Qué hay que hacer para que un método ¿Qué hay que hacer para que un método
pueda modificar el valor original del pueda modificar el valor original del
argumento que se le pasa?argumento que se le pasa?
29/09/2010
10
Paso de objetos a métodosPaso de objetos a métodos
Recordemos:Recordemos:
�� Un tipo primitivo puede ser encapsulado en Un tipo primitivo puede ser encapsulado en un objeto.un objeto.
�� Java pasa los objetos por referencia a los Java pasa los objetos por referencia a los métodos.métodos.
¿Puede un método modificar el valor ¿Puede un método modificar el valor original del argumento que se le pasa original del argumento que se le pasa cuando éste es un objeto?cuando éste es un objeto?
class PasoArgumentos { class PasoArgumentos {
public static void Incrementar10(Integer param) public static void Incrementar10(Integer param) { {
int valor = param.intValue(); int valor = param.intValue();
valor +=10; valor +=10;
param = new Integer(valor); param = new Integer(valor);
// debería existir un método que permitiera// debería existir un método que permitiera
// cambiar el valor del objeto // cambiar el valor del objeto
// para que este cambio pudiera reflejarse// para que este cambio pudiera reflejarse
// afuera. Este método no existe. // afuera. Este método no existe.
} }
29/09/2010
11
public static void main(String [] args) { public static void main(String [] args) {
Integer arg = new Integer(1234);Integer arg = new Integer(1234);
Incrementar10(arg);Incrementar10(arg);
System.out.println(arg.intValue()); System.out.println(arg.intValue());
}}
}}
El resultado es 1234, El resultado es 1234, ¿qué ha ¿qué ha sucedido?sucedido? El método Incrementar10() no El método Incrementar10() no
solo no modificó la estructura de datos del solo no modificó la estructura de datos del
objeto referenciado por param, sino que objeto referenciado por param, sino que
asignó a param un nuevo objeto. asignó a param un nuevo objeto.
Para poder modificar el objeto pasado por Para poder modificar el objeto pasado por
referencia, la clase referencia, la clase IntegerInteger debería debería
proporcionar un método que permita proporcionar un método que permita
asignar un nuevo valor al objeto.asignar un nuevo valor al objeto.
29/09/2010
12
Paso de objetos a métodosPaso de objetos a métodos
¿Como solucionar este problema?¿Como solucionar este problema?
Recordemos, que una matriz es un objeto, lo Recordemos, que una matriz es un objeto, lo que significa que cuando se pase como que significa que cuando se pase como argumento a un método, será pasado por argumento a un método, será pasado por referencia.referencia.
Veamos de nuevo el ejemplo:Veamos de nuevo el ejemplo:
class PasoArgumentosMatriz class PasoArgumentosMatriz
{ {
public static void Incrementar10(int [] param) public static void Incrementar10(int [] param) { {
param[0]+=10; param[0]+=10;
} }
public static void main(String [] args) { public static void main(String [] args) {
int []arg = {1234}; int []arg = {1234};
Incrementar10(arg); Incrementar10(arg);
System.out.println(arg[0]); System.out.println(arg[0]);
}}
}}
29/09/2010
13
Asignación de ObjetosAsignación de Objetos
No olvide que cuando trabaja con objetos No olvide que cuando trabaja con objetos
lo que realmente manipula desde lo que realmente manipula desde
cualquier método son referencias a los cualquier método son referencias a los
objetos.objetos.
Ejemplo:Ejemplo:
CFecha fecha1 = new Cfecha();CFecha fecha1 = new Cfecha();
CFecha fecha2 = fecha1;CFecha fecha2 = fecha1;
Asignación de ObjetosAsignación de Objetos
En el ejemplo, al declarar una referencia En el ejemplo, al declarar una referencia
fecha2 y le asigna fecha1, tanto fecha 1 fecha2 y le asigna fecha1, tanto fecha 1
como fecha2 son referencias al mismo como fecha2 son referencias al mismo
objeto (al referenciado por fecha1).objeto (al referenciado por fecha1).
Esto demuestra que, el operador de Esto demuestra que, el operador de
asignación no sirve para copiar un objeto asignación no sirve para copiar un objeto
en otro.en otro.
29/09/2010
14
Asignación de ObjetosAsignación de Objetos
Solución: añadir a la clase Cfecha un Solución: añadir a la clase Cfecha un método como el siguiente:método como el siguiente:
public void copiar(Cfecha obj)public void copiar(Cfecha obj)
{{
dia = obj.dia;dia = obj.dia;
mes = obj.mes;mes = obj.mes;
año = obj.año;año = obj.año;
}}
Constructor copiaConstructor copia
Otra forma de iniciar un objeto es Otra forma de iniciar un objeto es
asignándole otro objeto de su misma clase asignándole otro objeto de su misma clase
en el momento de su creación. en el momento de su creación.
Lógicamente, si se crea un objeto tiene Lógicamente, si se crea un objeto tiene
que intervenir un constructor.que intervenir un constructor.
El prototipo del constructor es:El prototipo del constructor es:
nombre_clase(nombre_clase referencia_objeto)nombre_clase(nombre_clase referencia_objeto)
29/09/2010
15
Constructor copiaConstructor copia
Un constructor que se invoca para iniciar Un constructor que se invoca para iniciar
un nuevo objeto creado a partir de otro un nuevo objeto creado a partir de otro
existente es denominado existente es denominado constructor constructor copiacopia..
Añada a CFecha:Añada a CFecha:
public CFecha(CFecha obj) {public CFecha(CFecha obj) {
dia=obj.dia; mes=obj.mes;dia=obj.dia; mes=obj.mes;
año=obj.año; }año=obj.año; }
Destrucción de objetosDestrucción de objetos
Existe un método que se invoca Existe un método que se invoca
automáticamente cada vez que se va a automáticamente cada vez que se va a
destruir un objeto, sus funciones son de destruir un objeto, sus funciones son de
preparación para la terminación y preparación para la terminación y recibe el nombre genérico de finalizador recibe el nombre genérico de finalizador
(destructor en C++). El método se llama (destructor en C++). El método se llama
finalize() finalize() y realiza su tarea antes que el y realiza su tarea antes que el
recolector de basura reclame la memoria recolector de basura reclame la memoria
de ese objeto.de ese objeto.
29/09/2010
16
Destrucción de objetosDestrucción de objetosCuando se destruye un objeto ocurren Cuando se destruye un objeto ocurren
varias cosas:varias cosas:
�� Se llama al método Se llama al método finalizefinalize
�� El recolector de basura se encarga de El recolector de basura se encarga de eliminar el objeto, lo que conlleva liberar los eliminar el objeto, lo que conlleva liberar los recursos que dicho objeto tenga adjudicados.recursos que dicho objeto tenga adjudicados.
Cuando ya no hay más referencias a un Cuando ya no hay más referencias a un
objeto, éste queda automáticamente objeto, éste queda automáticamente
marcado para la recolección de basura.marcado para la recolección de basura.
DestructorDestructor
Cuando no especificamos finalizador, el Cuando no especificamos finalizador, el compilador proporciona uno a través de la clase compilador proporciona uno a través de la clase Object.Object.
Sintaxis del finalizador por omisión:Sintaxis del finalizador por omisión:protected void finalize() throws Throwable { /* sin codigo */ }protected void finalize() throws Throwable { /* sin codigo */ }
Este método no puede sobrecargarse.Este método no puede sobrecargarse.
Todos los objetos heredan un método finalize() Todos los objetos heredan un método finalize() definido en la clase Object para guardar espacio definido en la clase Object para guardar espacio y sin hacer nada.y sin hacer nada.
29/09/2010
17
//Declaración de la clase Empleado//Declaración de la clase Empleado
public class Empleadopublic class Empleado
{{
private String primerNombre;private String primerNombre;
private String apellidoPaterno;private String apellidoPaterno;
private static int cuenta = 0; private static int cuenta = 0;
//número de objetos en la memoria//número de objetos en la memoria
//iniciar empleado, sumar 1 a la cuenta//iniciar empleado, sumar 1 a la cuenta
//estática y mostrar String indicando //estática y mostrar String indicando
//que se llamó al constructor//que se llamó al constructor
public Empleado ( String nombre, String public Empleado ( String nombre, String
apellido )apellido )
{{
primerNombre = nombre;primerNombre = nombre;
apellidoPaterno = apellido;apellidoPaterno = apellido;
++cuenta; //incrementar cuenta static ++cuenta; //incrementar cuenta static
//de empleados//de empleados
System.out.println("Constructor de System.out.println("Constructor de
empleado: " + primerNombre +empleado: " + primerNombre +
” ”+apellidoPaterno);” ”+apellidoPaterno);
}}
//restar 1 de la cuenta estática cuando //restar 1 de la cuenta estática cuando
//el recolector de basura//el recolector de basura
//llama a finalize para limpiar el objeto //llama a finalize para limpiar el objeto
//y mostrar que se llamo a finalize//y mostrar que se llamo a finalize
protected void finalize()protected void finalize()
{{
29/09/2010
18
----cuenta; //decrementar cuenta cuenta; //decrementar cuenta
//estática de empleados;//estática de empleados;
System.out.println("Finalizador de System.out.println("Finalizador de
empleado: " + primerNombre +empleado: " + primerNombre +
" "+ apellidoPaterno + "; cuenta = " " "+ apellidoPaterno + "; cuenta = "
+ cuenta );+ cuenta );
}}
//obtener primer Nombre//obtener primer Nombre
public String obtenerPrimerNombre()public String obtenerPrimerNombre()
{{
return primerNombre;return primerNombre;
}}
//obtener apellido//obtener apellido
public String obtenerApellidoPaterno()public String obtenerApellidoPaterno()
{{
return apellidoPaterno;return apellidoPaterno;
}}
//método estático para obtener el valor //método estático para obtener el valor
//de la cuenta estática//de la cuenta estática
public static int obtenerCuenta()public static int obtenerCuenta()
{{
return cuenta;return cuenta;
}}
} //fin de la clase empleado} //fin de la clase empleado
29/09/2010
19
//Prueba de la clase empleado
import javax.swing.*;
public class PruebaEmpleado {
public static void main ( String []
args ){
//demostrar que cuenta es 0 antes de
//crear Empleados
String salida = "Empleados antes de
instanciar: “+ Empleado.obtenerCuenta();
//crear 2 empleados,la cuenta debe ser 2
Empleado e1=new Empleado( "Maria",
"Flores");
Empleado e2= new Empleado ( "Juan",
"Perez");
//demostrar que la cuenta es 2 despues de crear
//dos Empleados
salida += "\n\nEmpleados después de instanciar:
“+"\nvia e1.obtenerCuenta(): " +
e1.obtenerCuenta()+"\nvia e2.obtenerCuenta(): " +
e2.obtenerCuenta()+"\nvia Empleado.obtenerCuenta():
“+Empleado.obtenerCuenta();
//obtener nombre de empleados
salida += "\n\nEmpleado 1:
"+e1.obtenerPrimerNombre()+" "+
e1.obtenerApellidoPaterno()+"\nEmpleado 2:" +
e2.obtenerPrimerNombre()+ “ “
+e2.obtenerApellidoPaterno();
29/09/2010
20
//decrementar la cuenta de referencia para cada
//objeto Empleado;en este ejemplo, hay sólo una
//referencia a cada Empleado, por lo
//que estas instrucciones marcan a cada objeto
//Empleado para la recolección de basura
e1 = null;
e2 = null;
System.gc(); //sugerir una llamada al
//recolector de basura
//mostrar cuenta de objetos Empleado despues de
//llamar al recolector de basura; la cuenta
//mostrada puede ser 0, 1 o 2 dependiendo de si
//el recolector de basura se ejecuta
//inmediatamente o no y del numero de
//objetos Empleado recolectados.
salida += "\n\nEmpleados después de
System.gc():“+Empleado.obtenerCuenta();
JOptionPane.showMessageDialog(null,
salida, "Miembros estaticos“,
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}//fin de la clase PruebaEmpleado
29/09/2010
21
Cuando finalice la ejecución del método Cuando finalice la ejecución del método mainmain no no se visualiza el mensaje “objeto destruido” tantas se visualiza el mensaje “objeto destruido” tantas veces como objetos hay. Eso significa que el veces como objetos hay. Eso significa que el recolector de basura, justo en este instante, no recolector de basura, justo en este instante, no está en ejecución; un poco más tarde, está en ejecución; un poco más tarde, posiblemente cuando el sistema esté libre, el posiblemente cuando el sistema esté libre, el recolector de basura identificará los objetos que recolector de basura identificará los objetos que no tienen referencias y los eliminará liberando la no tienen referencias y los eliminará liberando la memoria que ocupan.memoria que ocupan.
No se garantiza que el recolector de No se garantiza que el recolector de
basura se ejecute; por lo tanto, no se basura se ejecute; por lo tanto, no se
garantiza que el método finalize() de un garantiza que el método finalize() de un
objeto vaya a llamarse. No diseñe clases objeto vaya a llamarse. No diseñe clases
que dependan de que el recolector de que dependan de que el recolector de
basura llame al método finalize de un basura llame al método finalize de un
objeto para regresar recursos al sistema.objeto para regresar recursos al sistema.
29/09/2010
22
Si una clase tiene miembros que son Si una clase tiene miembros que son
objetos de otras clases, su finalizador se objetos de otras clases, su finalizador se
ejecuta antes que los finalizadores de los ejecuta antes que los finalizadores de los
objetos miembro. En otras palabras, el objetos miembro. En otras palabras, el
orden de llamada a los finalizadores es orden de llamada a los finalizadores es
inverso al orden de construcción.inverso al orden de construcción.
Un finalizador también se puede llamar Un finalizador también se puede llamar
explícitamente así: explícitamente así: objeto.finalize()objeto.finalize()..
Invocar a Invocar a finalizefinalize no activa un objeto para no activa un objeto para
que sea enviado a la basura. Solo cuando que sea enviado a la basura. Solo cuando
se eliminan todas las referencias que se eliminan todas las referencias que
apuntan al mismo, éste se marca como apuntan al mismo, éste se marca como
destruible.destruible.
29/09/2010
23
Recolector de basuraRecolector de basuraEl recolector de basura se ejecuta en un El recolector de basura se ejecuta en un subproceso paralelamente a su aplicación subproceso paralelamente a su aplicación limpiando la basura (objetos desreferenciados) limpiando la basura (objetos desreferenciados) en forma silenciosa y en segundo plano y nunca en forma silenciosa y en segundo plano y nunca se detiene por más de una pequeña cantidad de se detiene por más de una pequeña cantidad de tiempo.tiempo.
Si desea forzar una completa recolección de Si desea forzar una completa recolección de basura (marcar y barrer), puede hacerlo basura (marcar y barrer), puede hacerlo llamando al método llamando al método gc (garbage collector)gc (garbage collector) de de la clase la clase SystemSystem..
Recolector de basuraRecolector de basuraRuntime runtime=Runtime.getRuntime();Runtime runtime=Runtime.getRuntime();
runtime.gc();runtime.gc();
runtime.runFinalization();runtime.runFinalization();
Rara vez será necesario llamar al Rara vez será necesario llamar al
recolector de basura, a lo mejor, si acaba recolector de basura, a lo mejor, si acaba
de liberar muchos objetos ya inservibles y de liberar muchos objetos ya inservibles y
quiere que se lleven pronto la basura.quiere que se lleven pronto la basura.
Se puede sugerir llamar al recolector Se puede sugerir llamar al recolector
también así:también así:
System.gc();System.gc();