Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
dev:java:lang:weakrefs [2012/08/04 18:40] jamis7005 создано |
dev:java:lang:weakrefs [2012/08/04 20:34] (текущий) jamis7005 |
||
---|---|---|---|
Строка 2: | Строка 2: | ||
<code java> | <code java> | ||
- | + | class TestA { | |
- | class TheStrong { | + | private Object link; |
- | public Object link; | + | |
public Object getLink(){ return link; } | public Object getLink(){ return link; } | ||
- | public void print(Object newlink){ | + | public void setLinkAndPrint(Object newlink){ |
link = newlink; | link = newlink; | ||
- | System.out.println("TheStrong: my link =" + getLink()); | + | print(); |
+ | } | ||
+ | |||
+ | public void print(){ | ||
+ | Runtime r = Runtime.getRuntime(); | ||
+ | r.gc(); | ||
+ | System.out.println(getClass().getName() + ": link =" + getLink()); | ||
} | } | ||
} | } | ||
- | class TheWeak { | + | class TestB { |
- | public WeakReference<Object> link; | + | private WeakReference<Object> link; |
public Object getLink(){ return link.get(); } | public Object getLink(){ return link.get(); } | ||
- | public void print(Object newlink){ | + | public void setLinkAndPrint(Object newlink){ |
link = new WeakReference<>( newlink ); | link = new WeakReference<>( newlink ); | ||
- | System.out.println("TheWeak: my link =" + getLink()); | + | print(); |
+ | } | ||
+ | |||
+ | public void print(){ | ||
+ | Runtime r = Runtime.getRuntime(); | ||
+ | r.gc(); | ||
+ | System.out.println(getClass().getName() + ": link =" + getLink()); | ||
} | } | ||
} | } | ||
- | public class Test { | + | public class TestWeakRef { |
- | public static void main(String[] args) throws IOException { | + | public static void main(String[] args) { |
- | TheWeak a1 = new TheWeak(); | + | TestA a = new TestA(); |
- | a1.print(Arrays.asList(1,2,3)); | + | a.setLinkAndPrint(Arrays.asList(4,5,6)); |
- | + | a.print(); | |
- | TheStrong b1 = new TheStrong(); | + | |
- | b1.print(Arrays.asList(4,5,6)); | + | |
- | Runtime r = Runtime.getRuntime(); | + | TestB b = new TestB(); |
- | r.gc(); | + | b.setLinkAndPrint(Arrays.asList(1,2,3)); |
- | + | b.print(); | |
- | System.out.println("TheWeak: its link=" + a1.link.get()); | + | |
- | System.out.println("TheStrong: its link=" + b1.link); | + | |
} | } | ||
} | } | ||
+ | </code> | ||
+ | Result: | ||
<code> | <code> | ||
+ | promauto.batchext.TestA: link =[4, 5, 6] | ||
+ | promauto.batchext.TestA: link =[4, 5, 6] | ||
+ | promauto.batchext.TestB: link =[1, 2, 3] | ||
+ | promauto.batchext.TestB: link =null | ||
+ | |||
+ | |||
+ | </code> | ||
+ |