[ 
https://issues.apache.org/jira/browse/JEXL-61?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Henri Biestro resolved JEXL-61.
-------------------------------

    Resolution: Fixed


URL: http://svn.apache.org/viewvc?rev=834256&view=rev
Log: 
Fix for JEXL-61; all caches get wrapped by SoftReference, allowing them to be 
GCed under memory pressure. 

Modified: 
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl/Interpreter.java
 
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl/JexlEngine.java 
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl/UnifiedJEXL.java
 
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl/util/Introspector.java
 
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl/util/introspection/Introspector.java
 
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl/util/introspection/IntrospectorBase.java
 
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl/util/introspection/MethodKey.java
 
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl/util/introspection/MethodMap.java
 
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl/util/introspection/UberspectImpl.java
 

> 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
>            Assignee: Henri Biestro
>             Fix For: 2.0
>
>
> 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