1. 개요
- 자바 9 이상 사용시
- JreMemoryLeakPreventionListener의 urlCacheProtection 옵션 사용시
- JAR URL connections의 캐싱을 disable 하려면 자바 9에서 추가된 API를 사용한다.
2. 관련 코드
/**
* Protect against resources being read for JAR files and, as a side-effect,
* the JAR file becoming locked. Note this disables caching for all
* {@link URLConnection}s, regardless of type. Defaults to
* true
.
*/
private boolean urlCacheProtection = true;
public boolean isUrlCacheProtection() { return urlCacheProtection; }
public void setUrlCacheProtection(boolean urlCacheProtection) {
this.urlCacheProtection = urlCacheProtection;
}
/* * Several components end up opening JarURLConnections without * first disabling caching. This effectively locks the file. * Whilst more noticeable and harder to ignore on Windows, it * affects all operating systems. * * Those libraries/components known to trigger this issue * include: * - log4j versions 1.2.15 and earlier * - javax.xml.bind.JAXBContext.newInstance() * * https://bugs.openjdk.java.net/browse/JDK-8163449 * * Java 9 onwards disables caching for JAR URLConnections * Java 8 and earlier disables caching for all URLConnections */ // Set the default URL caching policy to not to cache if (urlCacheProtection) { try { JreCompat.getInstance().disableCachingForJarUrlConnections(); } catch (IOException e) { log.error(sm.getString("jreLeakListener.jarUrlConnCacheFail"), e); } }