런타임시 JDBC 드라이버 jar를로드하는 REST 서비스를 만들었습니다.런타임시 드라이버 jar 파일을로드하여 페름 스페이스 공간 오류가 발생합니다.
Driver driverInstance;
URLClassLoader driverClassLoader;
driverClassLoader = new URLClassLoader (new URL[] { "c:/mysql.jar" }, System.class.getClassLoader());
Class<?> driverClass = driverClassLoader.loadClass("oracle.jdbc.driver.OracleDriver");
Connection conn = driverInstance.connect(connectionString, userDbCredentials);
데이터베이스에 데이터를로드하기 위해이 연결을 사용 후, 나는 연결 및 driverClassLoader을 모두 폐쇄하고 : 다음은이 작업을 수행하는 코드이다. 그러나 얼마 동안 그것을 실행 한 후에 나는 java.lang.OutOfMemoryError : PermGen space을 tomcat 서버에 가지고 있습니다.
나는 힙 덤프를했다, 그리고 이클립스 메모리 분석기를 사용하여 열고 그 아래 누출 의심되는 메시지를 발견 : "org.apache.catalina.loader.WebappClassLoader"의 13 인스턴스 java.net "에 의해로드를 .URLClassLoader @ 0xc155fc10 "은 14,083,776 (32.21 %) 바이트를 차지합니다. 런타임시 드라이버 jar의로드로 인한 것으로 알고 있지만 해결 방법을 찾을 수 없습니다.
드라이버가 tomcat의 libs/폴더에 있습니까? – nablex
아니요, 외부 경로에서 읽습니다. – sf9251
코드가 정확히 어디에서 실행됩니까? 클래스 로더 생성은 드라이버 당 한 번만 수행됩니까? 아니면 특정 호출이 완료 될 때마다 수행됩니까? – Gimby