[
https://issues.apache.org/jira/browse/HBASE-16703?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15519758#comment-15519758
]
Andrew Purtell commented on HBASE-16703:
----------------------------------------
There's no reason we can't hold on to earlier allocated SeekerState objects,
and their existing byte arrays, since they'll reallocate if needed. A wrinkle
is SeekerState is shallow cloned with a wrapper class ClonedSeekerState for use
by upper layers. Is that cloning sufficient to protect against reuse of the
base SeekerState? I think that is the intent. If insufficient we can still do
reference counting of SeekerState objects for deciding when to return them to a
shared pool. Also, we can have the pools be thread locals to avoid cross thread
synchronization overheads and still get a win on reducing allocations
substantially.
> Explore object pooling of SeekerState
> -------------------------------------
>
> Key: HBASE-16703
> URL: https://issues.apache.org/jira/browse/HBASE-16703
> Project: HBase
> Issue Type: Task
> Reporter: Andrew Purtell
>
> In read workloads 35% of the allocation pressure produced by servicing RPC
> requests comes from SeekerState.<init> of the DataBlockEncoder implementation
> currently in use, where we allocate two byte arrays of
> INITIAL_KEY_BUFFER_SIZE in length. There's an opportunity for object pooling
> of SeekerState here. Subsequent code checks if those byte arrays are sized
> sufficiently to handle incoming data to copy. The arrays will be resized if
> needed.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)