T- the resource type.
public class LeakDetector<T> extends AbstractLifeCycle implements java.lang.Runnable
Resource pools usually have a method to acquire a pooled resource and a method to released it back to the pool.
To detect if client code acquires a resource but never releases it, the resource pool can be modified to use a
LeakDetector. The modified resource pool should call
acquired(Object) every time the method to
acquire a resource is called, and
released(Object) every time the method to release the resource is called.
LeakDetector keeps track of these resources and invokes method
leaked(org.eclipse.jetty.util.LeakDetector.LeakInfo) when it detects that a resource has been leaked (that
is, acquired but never released).
To detect whether client code releases a resource without having acquired it, the resource pool can be modified to
check the return value of
released(Object): if false, it means that the resource was not acquired.
This class relies on
System.identityHashCode(Object) to create a unique id for each resource passed to
System.identityHashCode(Object) does not guarantee
that it will not generate the same number for different objects, but in practice the chance of collision is rare.
PhantomReferences to detect leaks.
PhantomReferences are enqueued in their
ReferenceQueue after they have been garbage collected (differently from
are enqueued before). Since the resource is now garbage collected,
LeakDetector checks whether it
has been released and if not, it reports a leak. Using
PhantomReferences is better than overriding
Object.finalize() and works also in those cases where
Object.finalize() is not overridable.
|Modifier and Type||Class and Description|
Information about the leak of a resource.
|Constructor and Description|
|Modifier and Type||Method and Description|
Tracks the resource as been acquired.
Generates a unique ID for the given resource.
Callback method invoked by
Tracks the resource as been released.
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, setStopTimeout, start, stop
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
public boolean acquired(T resource)
resource- the resource that has been acquired
public boolean released(T resource)
resource- the resource that has been released
public java.lang.String id(T resource)
resource- the resource to generate the unique ID for
protected void doStart() throws java.lang.Exception
protected void doStop() throws java.lang.Exception
public void run()
Copyright © 1995–2018 Webtide. All rights reserved.