2013-04-15 5 views
2

데이터베이스에 레코드를 삽입하는 동안 Java 힙 공간 오류가 발생합니다. 나는 오라클이 어떻게 힙을 소비 할 수 있는지와 왜 이것이 많이 소비 하는지를 확신하지 못한다. 이 오류는이 라인에서 발생하는됩니다 : 여기 데이터베이스에 레코드를 삽입하는 중 Java 힙 공간 오류가 발생합니다.

Connection con  = null; 
    PreparedStatement ps = null; 
    ResultSet rs   = null; 
    String sqlString  = null; 
    DaoUtility dUtil  = DaoUtility.getInstance(); 

    try 
    { 
     con = dUtil.getConnection(); 
     . . . 
     dUtil.executeUpdate(ps); 

로그입니다 :

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)

+0

더 많은 코드를 게시 할 수 있습니까? – Abubakkar

+1

'null'인 PreparedStatement를 전달하고 있습니다. 이 경우 오류가 발생할 것으로 예상되지만 오히려'NullPointerException','IllegalArgumentException' 또는 이와 비슷한 것이되어야합니다. – Philipp

+0

@Philipp 통화 위에 줄임표가 있음을 유의하십시오. 어쨌든,이 질문은 OP가 사용하고있는 상세한 자바 코드에 그다지 중요하지 않습니다. –

답변

1

오라클 JDBC 드라이버는 메모리 소비 악명이 높다. 메모리 사용을 제어 할 수있는 configuration parameters에 대해 읽어보십시오. 특히 귀하의 사례에 대해서는 oracle.jdbc.maxCachedBufferSize을 기록하십시오.

0

JDBC 및 응용 프로그램의 JDK 버전도 확인해야합니다. 둘 사이의 언젠가 불일치로 인해 그러한 오류가 발생할 수도 있습니다.

또한 다른 (단순한) 테이블에 레코드를 삽입 할 수 있습니다. 이것은 특정 테이블에 삽입하는 것이 문제인지 확인하는 것입니다 (더 많은 행이나 데이터 볼륨이 없기 때문에).

1

일반적으로이 힙은 Java 힙에서 오브젝트를 할당 할 공간이 충분하지 않은 경우 발생합니다. 이 경우 가비지 컬렉터는 새 오브젝트를 수용 할 수있는 공간을 확보 할 수 없으므로 힙을 더 이상 확장 할 수 없습니다. 또한 Java 클래스의로드를 지원하기에 충분한 기본 메모리가없는 경우이 오류가 발생할 수 있습니다. 드물게, 가비지 콜렉션을 수행하는 데 많은 시간이 소요되고 메모리가 거의 사용되지 않으면 java.lang.OutOfMemoryError가 발생합니다.

관련 문제