Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

A pool for attaching object to objects during their lifecycle (i.e. decorators).

Notifications You must be signed in to change notification settings

lowdewijk/WeakObjectPool

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
2 Commits
 
 
 
 

Repository files navigation

#Weak Object Pool

Problem

Did you ever want to track a bunch of objects without referencing them directly in order not to disturb their natural lifecycle using weak references? Have you ever tried to extend Java objects during run-time?

Solution

WeakObjectPool: A pool for holding and extending [weak referenced objects](http://download.oracle.com/javase/1,5.0/docs/api/java/lang/ref/WeakReference.html" title="WeakReference JavaDoc). How does this differ from Java's WeakHashMap? Several key differences are there, that effecitvely define WeakObjectPool:

  1. WeakHashMap has a weak keys not values, like WeakObjectPool.
  2. Its a pool not a map, otherwise also known as a multi-map.
  3. WeakObjectPool allows you to store additional information about a weakly referenced object in the pool for the duration of the lifecycle of the object (a decorator).

#Usage:

No dependencies required.

new WeakObjectPool<KEY, VALUE, DECORATOR>()

Example:

/* Create the pool. 
     KEY type is String. 
	 VALUE type is Integer (tracked object).
	 DECORATOR type is String 
*/
WeakObjectPool<String, Integer, String> pool = new WeakObjectPool<>();

// make integer object x
Integer x = new Integer(314);
		
// store x in pool with extra info (String)
pool.add("x", x, "X was created on "+ new Date().getTime());
		
// get x out of the pool
System.out.println("Object x = "+ pool.get("x").get(0).getObject());
		System.out.println(pool.get("x").get(0).getInfo());

Console output:

Object x = 314
X was created on 1321807672613

Now if x is not referenced anymore and the object x was erased by the garbage collector the object will automatically disappear from the pool (that's what weak referenced means). To demonstrate:

// get rid of all x references
x=null;
// make sure it's completely gone
System.gc();
System.runFinalization();

// proof it's gone from the pool
System.out.println("References found to x = "+ pool.get("x").size());

Console output:

References found to x = 0. 

Background

This code is pretty old (written in 2007 with Java 5). I'd recommend having a look at Gauva to see if any of their collection types fit your needs. The decoration part of this code still seems to be unique though.

About

A pool for attaching object to objects during their lifecycle (i.e. decorators).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.