[ 
https://issues.apache.org/jira/browse/DERBY-2114?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12481114
 ] 

Knut Anders Hatlen commented on DERBY-2114:
-------------------------------------------

> Well, honestly I've not considered how well StatementCache was implemented, 
> as this wasn't my itch.
This is not so much about the implementation of StatementCache. My worry is 
that by requiring the callers of CacheManager.values() to synchronize on the 
CacheManager and hold the synchronization while traversing the returned 
collection, it will be harder to replace Clock with another implementation of 
CacheManager later because the interface implicitly dictates how the internal 
synchronization must be implemented. If someone wants to rewrite the cache 
manager, say, to allow threads to enter it concurrently, she couldn't just 
implement the interface and plug in the new implementation since the interface 
required that there was a global synchronization point.

> But why create two copies? Why not just return a Vector of PreparedStatements 
> directly, then?
That's possible, but I'm not sure it's a good idea to introduce a dependency 
from CacheManager/Clock to PreparedStatement. Since this is diagnostic code, I 
wouldn't worry too much about copying it twice. Keeping the interface cleaner 
is more important in this case, I think.

By the way, if we make values() return a copy, I think it is better if it 
returns a collection of Cacheables instead of a collection of CachedItems, 
since Cacheable is iapi and CachedItem is impl. (Actually, I think the use in 
diag.StatementCache is the only reason why CachedItem is public and not package 
private.)

> Let Clock embed a HashMap rather than inherit from Hashtable
> ------------------------------------------------------------
>
>                 Key: DERBY-2114
>                 URL: https://issues.apache.org/jira/browse/DERBY-2114
>             Project: Derby
>          Issue Type: Improvement
>          Components: Performance
>    Affects Versions: 10.2.1.6
>            Reporter: Dyre Tjeldvoll
>         Assigned To: Dyre Tjeldvoll
>            Priority: Trivial
>             Fix For: 10.3.0.0
>
>         Attachments: derby-2114.v1.diff, derby-2114.v1.stat
>
>
> Clock currently inherits from Hashtable, but the use of Hashtable is really 
> an implementation detail that would benefit from being hidden as private 
> member. All access to the hashtable happens inside sychronized blocks so it 
> is safe to substitute a HashMap. This change appears to trigger a small 
> increase in throughput, as measured by the average TPS number obtained by 
> running the select client from DERBY-1961 repeatedly.

-- 
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