PreparedStatements를 캐시하는 사내 DB 연결 풀로 작업하고 있습니다. 연결이 풀로 반환되면 캐시 된 문은 닫히지 않습니다. 이것들은 mySQL 드라이버에서 OutOfMemoryExceptions를 생성합니다. 그래서는 HashMap < 문자열,하는 SoftReference < PreparedStatement의 > >해당 GC 이전에 SoftReference로 저장된 PreparedStatements를 닫아야합니다.
에서의 PreparedStatement 캐시를 저장하기 위해 계획입니다 그러나 이것은 그들이 GC'd 전에 나를 문을 닫을 수 없습니다.
ReferenceQueue를 사용하는 것은 쓸모가 없으며, finalize 메소드가 권장되지 않는다는 것을 읽었습니다.
PreparedStatement를 캐싱 할 때 메모리가 누출되는 것 외에 다른 결과가 있습니까? –
PreparedStatments를 캐싱하면 데이터베이스를 사용할 때마다 데이터베이스에 한 번 왕복하는 것과 같은 이점이 있습니다.하지만 이점이 비용보다 중요한 이유는 확실하지 않습니다. 어쨌든 나를 위해 캐싱을 제거하는 것이 훨씬 더 복잡합니다 (많은 성능 테스트) 내가 제안하고있는 SoftReference 접근보다. – austindz
PreparedStatement를 만들 때 DB 로의 왕복이 확실합니까? 나는 한 번도 본 적이 없다. 오직 사형에 처해있다. 마이크로 벤치 마크가 아닌 응용 프로그램의 글로벌 컨텍스트에서 이러한 최적화를 도입 할 때 실제로 예상되는 이점을 측정 했습니까? PreparedStatements의 생성은 실제로 핫스팟입니까? –