code: @Override
  	public synchronized T get()
  	{
  		T val;
  
  		synchronized(this)
  		{
  			if(valRef==null || (val = valRef.get())==null)
  			{
  				val = make();
  				valRef = new WeakReference<T>(val);
  			}
  		}
  		return val;
  	}
docs: Get the cached object. If the object is not in memory, it is recreated.