Boa pergunta, as classes do pacote java.lang.ref suportam um limitado grau de 
intera��o com o Garbage Collector (GC), e influencia no ciclo de vida do objeto.

        N�o existe um objeto com nome StrongReference, isso � apenas para entender, 
uma 
refer�ncia forte � algo como:

String s = "SouJava";

        Uma SoftReference � uma refer�ncia em que quando o GC precisa liberar mem�ria, 
ele 
procura todas as SoftRefer�ncias e remove da mem�ria.

SoftReference soft = new SoftReference(s);
s = null
s = soft.get();
// retorna != null

        Uma WeakReference, � bastante semelhante ao SoftReference, com a diferen�a 
b�sica que 
a Soft usa algoritmos para saber se pode ser desalocados objetos da mem�ria, e o Weak 
n�o usa.

WeakReference soft = new WeakReference(s);
s = null
s = soft.get();
// retorna != null      

        A PhantomReference (ainda n�o usei), mas � um mencanismo de refer�ncia mais 
fraco.

        Aqui vai um pequeno programa de exemplo, execute-o com:

# java -Xmx6m TestReferences

        E troque alternadamente o Soft por Weak e veja a diferen�a

//-----------------------------------------------------------------
import java.lang.ref.*;
import java.util.*;

public class TestReferences {
        
        public static void main(String[] args) {
                
                printInfoMemory();
                System.out.println("-- before creating 1MB object");
                OneMegaByte oneMB = new OneMegaByte();
                
                //SoftReference soft = new SoftReference(oneMB);
                WeakReference soft = new WeakReference(oneMB);
                
                System.out.println("-- after creating 1MB object" + soft.get());
                printInfoMemory();
                System.out.println("-- consuming memory");
                
                int INTERACTIONS = 100;
                List l = new ArrayList(INTERACTIONS);
                oneMB = null;
                
                for (int i = 0; i < INTERACTIONS; i++) {
                        l.add(new OneMegaByte());
                        printInfoMemory();
                        
                        Object o = soft.get();
                        if (o != null) {
                                System.out.println(">>>>>>>>  oneMB is still alive!!! 
" + o);
                        } else {
                                System.out.println("<<<<<<<<  oneMB was garbaged !!! 
");
                        }
                }
                
                
        }
        
        static int count;
        
        static void printInfoMemory() {
                System.out.println("#######   " + (count++));
                System.out.println("### TOTAL MEMORY = " + 
Runtime.getRuntime().totalMemory());
                System.out.println("### FREE MEMORY = " + 
Runtime.getRuntime().freeMemory());
        }
        
}

class OneMegaByte {
        
        static int instanceCount = 1;
        
        int id;
        
        byte[] ONE_MB = new byte[1024 * 512];
        
        OneMegaByte() {
                id = instanceCount++;
                for (int i = 0; i < ONE_MB.length; i++) {
                        ONE_MB[i] = (byte) i;
                }
        }
        
        public String toString() {
                return "One MegaByte\'s Object [" + id + "]";
        }
        
}
//-----------------------------------------------------------------

[]s

Claudio Miranda


bmaguiar wrote:
> Pessoal, algu�m sabe qual � a diferen�a entre:
> 
>  - StrongReference
>  - SoftReference
>  - WeakReference
>  - PhantomReference
> 
> N�o consegui entender at� agora!!!
> 
> Um abra�o � todos.



------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP 
d�vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a