Issue
I am getting a java heap space error but while trying to insert a record to the database. I am not sure how come oracle is able to consume the heap and why it is consuming this much. The error is occuring on this line:
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sqlString = null;
DaoUtility dUtil = DaoUtility.getInstance();
try
{
con = dUtil.getConnection();
. . .
dUtil.executeUpdate(ps);
Here is the log:
java.lang.OutOfMemoryError: Java heap space at java.lang.reflect.Array.newArray(Native Method) at java.lang.reflect.Array.newInstance(Array.java:52) at oracle.jdbc.driver.BufferCache.get(BufferCache.java:226) at oracle.jdbc.driver.PhysicalConnection.getCharBuffer(PhysicalConnection.java:7643) at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2949) at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2355) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3571) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350) at weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:172)
Solution
Oracle JDBC driver is notorious for memory consumption. Please read about the configuration parameters available to you to control its memory consumption. Especially take note of oracle.jdbc.maxCachedBufferSize
for your case.
Answered By - Marko Topolnik