Probleme mit References (java.lang.ref.Reference)

MichiM

Mitglied
Hallo,

woran liegt es, dass die SoftReference-Zeile (mit anderen Reference-Klassen wie Weak- oder Phantom das gleiche) Probleme macht? :

Code:
import java.lang.ref.Reference;

public class ReferencesDemo
{
	public static void main(String[] args)
	{
 
            String aktivString = "Guten Tag!";
            String inaktivString;

	    inaktivString = new SoftReference (aktivString); 

	}
}

Eclipse 3.1 mit Anbindung Java 1.4 meint:
SoftReference cannot be resolved to a type

Nehm ich irgendein anderes Beispiel ausm Netz (z.B. das ), dann das gleiche.

Gruß Michi
 
P.S. ausserdem musst du die Klasse java.lang.ref.SoftReference und nicht
java.lang.ref.Reference importieren.

Gruß

RedWing
 
Hallo!

Schau mal hier:
Code:
 /**
  * 
  */
 package de.tutorials;
 
 import java.lang.ref.SoftReference;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /**
  * @author daritho
  * 
  */
 public class SoftReferencesExample {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) throws Exception {
 		SoftReference softReference = new SoftReference(new Object(){
 			protected void finalize() throws Throwable {
 				super.finalize();
 				System.out.println("gc ate me...");
 			}
 		});
 		
 		List list = new ArrayList();
 		while(true){
 			list.add(new byte[1000000]);
 			Object o = softReference.get();
 		    System.out.println(o != null ? o + " still there " : o + " already gone..." );
 			TimeUnit.SECONDS.sleep(1);
 		}
 	}
 
 }

gruss Tom
 
Ich hätte da auch eine bzw zwei Fragen zu.

1.) Wo liegt der Zusammenhang mit der Liste und der SoftReference aus
Toms Besipiel?
2.) Was ist das Kriterium zum Zerstören des Objektes welches sich hinter der
SoftReference verbirgt? Wenn es eine bestimmte Zeit lang nicht benutzt wird?

Danke und Gruß

RedWing
 
*hehe* :p

Ok, der Typ muss natürlich passen (SoftReference statt String), hab den Fehler nun eingesehen. Is mir dann beim Lesen des komplexen Beispiels rübergekommen - kurze und einfache Beispiele liegen mir komischerweise nicht so. ;)

Danke!
Michi
 
Hallo!

1.) Wo liegt der Zusammenhang mit der Liste und der SoftReference aus
Toms Besipiel?
2.) Was ist das Kriterium zum Zerstören des Objektes welches sich hinter der
SoftReference verbirgt? Wenn es eine bestimmte Zeit lang nicht benutzt wird?

zu 2). Siehe API Doc:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ref/SoftReference.html
Soft reference objects, which are cleared at the discretion of the garbage collector in response to memory demand. Soft references are most often used to implement memory-sensitive caches.
Wenn die JVM genötigt mehr Speicher zu allokieren werden zuerst alle Objekte die nur noch per SoftReference referenziert werden vom GC aus dem Weg geräumt...

Zu 1) ... in die Liste lege ich Byte Arrays die während der Laufzeit des Programms nicht vom garabgeCollector aufgesammelt werden können, da sie ja noch von der Liste referenziert werden... weiterhin brauchte ich ja ein Anwendungsbeispiel für 2).

Neben SoftReferences gibt es auch noch WeakReferences und PhantomReferences...
insgesamt erlaubt das References API einen gewissen Interaktionsspielraum mit dem GarbageCollector.

Gruss Tom
 

Neue Beiträge

Zurück