Usage of strong references on Method/Constructor & WeakHashMap usage
--------------------------------------------------------------------

                 Key: JEXL-61
                 URL: https://issues.apache.org/jira/browse/JEXL-61
             Project: Commons JEXL
          Issue Type: Improvement
    Affects Versions: 2.0, 1.1.1
            Reporter: Henri Biestro
             Fix For: Later


In MethodMap and IntrospectorBase in 2.0, we are using strong references on 
Method(s) and Constructor(s).
However, the ClassMap is using a WeakHashMap keyed on class and 
IntrospectorBase use SoftRefence on classes to allow the GC to remove them if 
the need arise.
I might misunderstand the whole thing but it seems "odd" since the GC can 
probaby *not* remove a class for which a strong reference on method or 
constructor exists; the getDeclaringClass seems to prevent this from being 
possible. The fix would be to use SoftReference on those List<Method> and 
Constructor used in the code.
The second - nitpicking - oddity is that a WeakHashMap is not the best fit for 
the kind of cache Jexl is using; a "SoftHashMap" should be a better choice; but 
the previous fix could prevent the inherent WeakHashMap problem too since 
holding those methods/ctors through SoftReference should still make "hard 
enough" references to the classes held by the keys for them to be removed.
In any case, the code is this way since its origin and no-one has complained 
(yet) about this (obscure feature to me) which documented intent is to "detect 
class loader changes"., thus the low priority. My (wild)guess is that anyone 
having really encountered this issue probably increased permSpace size for 
other reasons.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to