In more detail:
When load time weaving, the class Aj maintains a WeakHashMap from the classloader instance to a weaver instance. The aim is that
the weaver is around as long as the classloader is and should the classloader be dereferenced then the weaver can also be garbage
collected. The problem is that if there are many references to the classloader from within the weaver, these are considered hard
references and cause the classloader to be long lived - even if the user of the classloader has dereferenced it in their code.
The solution is that the weaver should use instances of WeakClassLoaderReference objects - so that when the users hard reference
to the classloader goes, nothing in the weaver will cause it to hang around. There is a big assertion here that the
WeakClassLoaderReference instances will not 'lose' their ClassLoader references until the top level ClassLoader reference is
null'd. This means there is no need to check for the null case on get() in this WeakReference logic below, because we shouldn't
be using this weaver if its associated ClassLoader has been collected. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=210470
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public boolean | equals(Object
the reference object with which to compare. obj)Overrides org. |
| BcelWeakClassLoaderReference | back to summary |
|---|---|
| public BcelWeakClassLoaderReference(ClassLoader loader) | |
| equals | back to summary |
|---|---|
| public boolean equals(Object obj) Overrides org. Doc from java. Indicates whether some other object is "equal to" this one.
The
An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.
| |