[
https://issues.apache.org/jira/browse/HBASE-6322?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13406757#comment-13406757
]
Ryan Brush commented on HBASE-6322:
-----------------------------------
My apologies...I had only run the tests around HTablePool since I had run into
some apparently unrelated test failures in a full build. (And I didn't expect
it to be included in the build so quickly. ;) It looks like we'll need to do
some refactoring in REST server's RegionResource for this to apply cleanly,
specifically the call to HTable.getRegionsInfo which requires the downcast (and
is deprecated, anyway).
I'm not deeply familiar with this part of the code base and probably won't be
able to dig into it today, but can get back to it in the next couple days, as
well as making sure there aren't any further regressions caused by this change.
> Unnecessary creation of finalizers in HTablePool
> ------------------------------------------------
>
> Key: HBASE-6322
> URL: https://issues.apache.org/jira/browse/HBASE-6322
> Project: HBase
> Issue Type: Bug
> Components: client
> Affects Versions: 0.92.0, 0.92.1, 0.94.0
> Reporter: Ryan Brush
> Fix For: 0.92.2
>
> Attachments: HBASE-6322-0.92.1.patch, HBASE-6322-trunk.1.patch
>
>
> From a mailing list question:
> While generating some load against a library that makes extensive use of
> HTablePool in 0.92, I noticed that the largest heap consumer was
> java.lang.ref.Finalizer. Digging in, I discovered that HTablePool's internal
> PooledHTable extends HTable, which instantiates a ThreadPoolExecutor and
> supporting objects every time a pooled HTable is retrieved. Since
> ThreadPoolExecutor has a finalizer, it and its dependencies can't get garbage
> collected until the finalizer runs. The result is by using HTablePool, we're
> creating a ton of objects to be finalized that are stuck on the heap longer
> than they should be, creating our largest source of pressure on the garbage
> collector. It looks like this will also be a problem in 0.94 and trunk.
> The easy fix is just to have PooledHTable implement HTableInterface (rather
> than subclass HTable), but this does break a unit test that explicitly checks
> that PooledHTable implements HTable -- I can only assume this test is there
> for some historical passivity reason.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira