You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Biestro (Jira)" <ji...@apache.org> on 2025/11/09 22:49:00 UTC
[jira] [Updated] (JEXL-448) Engines caching misses local variables handling and global eviction capability.
[ https://issues.apache.org/jira/browse/JEXL-448?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henri Biestro updated JEXL-448:
-------------------------------
Summary: Engines caching misses local variables handling and global eviction capability. (was: Cache handling is perfectible)
> Engines caching misses local variables handling and global eviction capability.
> -------------------------------------------------------------------------------
>
> Key: JEXL-448
> URL: https://issues.apache.org/jira/browse/JEXL-448
> Project: Commons JEXL
> Issue Type: Bug
> Affects Versions: 3.5.0
> Reporter: Henri Biestro
> Assignee: Henri Biestro
> Priority: Minor
> Fix For: 3.6.0
>
>
> WHAT:
> 1. When setting a new class loader, JEXL should invalidate all 'uberspected' objects to avoid keeping strong references on classes that should be unloaded.
> The JXLT engine(s) cache(s) is/are detached from JEXL and can not be cleared leading to potential strong references being kept on objects that otherwise would be GCed.
> 2. An expression AST is dependent on the local variables that are accessed; caching expressions must be thus verify that the local variables are the same. This is especially true for interpolation strings that do quite often refer to local variables.
> HOW:
> 1. A Metacache class that keeps track of created caches through weak references allows cleaning them if & when necessary.
> 2. The Source class is augmented with the scope local variables so those are part of the equality/comparison constraints. The interpolation strings are also cached in the Engine cache, their TemplateEngine being transient.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)