From 69bfaa557a654c0c66391cd79a61e988fd9b5147 Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Tue, 7 Feb 2017 17:50:11 +0100 Subject: [PATCH] BAEL-672 test case when one object is still referenced --- .../baeldung/weakhashmap/WeakHashMapTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/core-java/src/test/java/com/baeldung/weakhashmap/WeakHashMapTest.java b/core-java/src/test/java/com/baeldung/weakhashmap/WeakHashMapTest.java index 7b34c6b316..1c5a261eea 100644 --- a/core-java/src/test/java/com/baeldung/weakhashmap/WeakHashMapTest.java +++ b/core-java/src/test/java/com/baeldung/weakhashmap/WeakHashMapTest.java @@ -29,6 +29,30 @@ public class WeakHashMapTest { await().atMost(10, TimeUnit.SECONDS).until(map::isEmpty); } + @Test + public void givenWeakHashMap_whenCacheValueThatHasNoReferenceToIt_GCShouldReclaimThatObjectButLeaveReferencedObject() { + //given + WeakHashMap map = new WeakHashMap<>(); + BigImage bigImageFirst = new BigImage("foo"); + UniqueImageName imageNameFirst = new UniqueImageName("name_of_big_image"); + + BigImage bigImageSecond = new BigImage("foo_2"); + UniqueImageName imageNameSecond = new UniqueImageName("name_of_big_image_2"); + + map.put(imageNameFirst, bigImageFirst); + map.put(imageNameSecond, bigImageSecond); + assertTrue(map.containsKey(imageNameFirst)); + assertTrue(map.containsKey(imageNameSecond)); + + //when + imageNameFirst = null; + System.gc(); + + //then + await().atMost(10, TimeUnit.SECONDS).until(() -> map.size() == 1); + await().atMost(10, TimeUnit.SECONDS).until(() -> map.containsKey(imageNameSecond)); + } + class BigImage { public final String imageId;