[
https://issues.apache.org/jira/browse/DERBY-2380?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12479643
]
Daniel John Debrunner commented on DERBY-2380:
----------------------------------------------
Yes - XCL07 can be removed, wasn't sure how to do it at the time with the
recent change to (half) an xml format.
> A statement plan holds onto resources such as its generated class even after
> it has been invalidated.
> -----------------------------------------------------------------------------------------------------
>
> Key: DERBY-2380
> URL: https://issues.apache.org/jira/browse/DERBY-2380
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.0.2.0, 10.0.2.1, 10.1.1.0, 10.1.2.1, 10.1.3.1,
> 10.2.1.6, 10.2.2.0, 10.3.0.0
> Reporter: Daniel John Debrunner
> Assigned To: Daniel John Debrunner
>
> An internal plan (instance of GenericPreparedStatement) can be invalidated by
> other SQL operations such as DROP TABLE or DROP INDEX.
> When this happens the references to objects that are no longer useful such as
> the generated class and saved objects are held onto and thus use memory.
> If the statement is re-compiled then these objects will be handled by garbage
> collection.
> If the statement is not recompiled though, then these objects will remain
> until the plan (GenericPreparedStatement) is garbage collected.
> The plan being garbage collected can be held up for two reasons:
> 1) The plan is in the statement cache. Note that only in some cases does
> it make sense to remove an invalid plan from the statement cache, e.g. a DROP
> TABLE should remove any plan that uses that table, but a DROP TRIGGER should
> not remove an INSERT from the cache, as it is likely the plan will be re-used
> and re-compiled. This is a separate issue given that the memory usage can
> occur even if the plan is not in the cache.
> 2) The application holds onto a JDBC PreparedStatement that uses the plan.
> Given an application should not be able to affect memory usage like this then
> the GenericPreparedStatement.makeInvalid() call should null out fields that
> hold references to objects that have become invalid.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.