Merge branch 'tomekl007-HEXA-672'
This commit is contained in:
		
						commit
						f9391528fc
					
				| @ -154,6 +154,12 @@ | ||||
|             <version>${mockito.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.jayway.awaitility</groupId> | ||||
|             <artifactId>awaitility</artifactId> | ||||
|             <version>${avaitility.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>commons-codec</groupId> | ||||
| @ -371,6 +377,7 @@ | ||||
|         <mockito.version>1.10.19</mockito.version> | ||||
|         <testng.version>6.10</testng.version> | ||||
|         <assertj.version>3.6.1</assertj.version> | ||||
|         <avaitility.version>1.7.0</avaitility.version> | ||||
| 
 | ||||
|         <!-- maven plugins --> | ||||
|         <maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version> | ||||
|  | ||||
| @ -0,0 +1,72 @@ | ||||
| package com.baeldung.weakhashmap; | ||||
| 
 | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import java.util.WeakHashMap; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| 
 | ||||
| import static com.jayway.awaitility.Awaitility.await; | ||||
| import static org.junit.Assert.assertTrue; | ||||
| 
 | ||||
| public class WeakHashMapTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenWeakHashMap_whenCacheValueThatHasNoReferenceToIt_GCShouldReclaimThatObject() { | ||||
|         //given | ||||
|         WeakHashMap<UniqueImageName, BigImage> map = new WeakHashMap<>(); | ||||
|         BigImage bigImage = new BigImage("image_id"); | ||||
|         UniqueImageName imageName = new UniqueImageName("name_of_big_image"); | ||||
| 
 | ||||
|         map.put(imageName, bigImage); | ||||
|         assertTrue(map.containsKey(imageName)); | ||||
| 
 | ||||
|         //when big image key is not reference anywhere | ||||
|         imageName = null; | ||||
|         System.gc(); | ||||
| 
 | ||||
|         //then GC will finally reclaim that object | ||||
|         await().atMost(10, TimeUnit.SECONDS).until(map::isEmpty); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenWeakHashMap_whenCacheValueThatHasNoReferenceToIt_GCShouldReclaimThatObjectButLeaveReferencedObject() { | ||||
|         //given | ||||
|         WeakHashMap<UniqueImageName, BigImage> 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; | ||||
| 
 | ||||
|         BigImage(String imageId) { | ||||
|             this.imageId = imageId; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     class UniqueImageName { | ||||
|         public final String imageName; | ||||
| 
 | ||||
|         UniqueImageName(String imageName) { | ||||
|             this.imageName = imageName; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user