[ http://issues.apache.org/jira/browse/DERBY-2118?page=comments#action_12453774 ] Daniel John Debrunner commented on DERBY-2118: ----------------------------------------------
I'm also close to -1 on this change. The setLimit() call comes from Limit which prescribes its api, and the modified implementation does not fulfill its contract. The discussion on the list has: > I have noticed that two methods, setPosition(int) and setLimit(int) > seem to use more CPU than what I find "reasonable" given what they're > supposed to do. Together they use 4.5% of user CPU and 1.5% of system > CPU. Are there updated numbers for the same tests with the patch applied? Also how can these methods take up 1.5% of system time, since they are just modifying instance fields, isn't that all user code? > Change some boundary checks in ArrayInputStream to ASSERTs to improve > performance > --------------------------------------------------------------------------------- > > Key: DERBY-2118 > URL: http://issues.apache.org/jira/browse/DERBY-2118 > Project: Derby > Issue Type: Improvement > Components: Performance > Affects Versions: 10.2.1.6 > Reporter: Dyre Tjeldvoll > Priority: Trivial > Fix For: 10.3.0.0 > > Attachments: derby-2118.diff, derby-2118.stat, derby-2118.v2.diff > > > Profiling shows that a significant amount of CPU is spent doing boundary > checking in ArrayInputStream.setPosition() and ArrayInputStream.setLimit(). > These checks appear to be there to detect error conditions, so it seems more > appropriate to make them ASSERTs. Especially since they are so expensive. > DTrace analysis seems to confirm that these methods get called very > frequently: > Knut Anders Hatlen wrote the following in a message on derby-dev: > FYI, I just ran the DERBY-1961 test clients and traced them with a > DTrace script that printed how often each method was called. For the > join client, ArrayInputStream.setPosition() was the most frequently > called method (43837.7 calls/tx). For the single-record select client, > it was third (58.4 calls/tx), only beaten by Object.<init>() and > DDMWriter.ensureLength(). I think this means that setPosition() is the > engine method that is most frequently called, at least in read-mostly > transactions. ArrayInputStream.setLimit() also appeared near the top > of the list. See http://wiki.apache.org/db-derby/Derby1961MethodCalls > for the details. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
