Oracle T4CPreparedStatement memory leaks?
- by Jay
A little background on the application that I am gonna talk about in the next few lines:
XYZ is a data masking workbench eclipse RCP application: You give it a source table column, and a target table column, it would apply a trasformation (encryption/shuffling/etc) and copy the row data from source table to target table. Now, when I mask n tables at a time, n threads are launched by this app.
Here is the issue:
I have run into a production issue on first roll out of the above said app. Unfortunately, I don't have any logs to get to the root. However, I tried to run this app in test region and do a stress test.
When I collected .hprof files and ran 'em through an analyzer (yourKit), I noticed that objects of oracle.jdbc.driver.T4CPreparedStatement was retaining heap. The analysis also tells me that one of my classes is holding a reference to this preparedstatement object and thereby, n threads have n such objects. T4CPreparedStatement seemed to have character arrays: lastBoundChars and bindChars each of size char[300000].
So, I researched a bit (google!), obtained ojdbc6.jar and tried decompiling T4CPreparedStatement. I see that T4CPreparedStatement extends OraclePreparedStatement, which dynamically manages array size of lastBoundChars and bindChars.
So, my questions here are:
Have you ever run into an issue like
this?
Do you know the significance of
lastBoundChars / bindChars?
I am new to profiling, so do you
think I am not doing it correct? (I
also ran the hprofs through MAT -
and this was the main identified
issue - so, I don't really think I
could be wrong?)
I have found something similar on the web here:
http://forums.oracle.com/forums/thread.jspa?messageID=2860681
Appreciate your suggestions / advice.