Author: markt
Date: Mon Aug 8 15:19:28 2016
New Revision: 1755511
URL: http://svn.apache.org/viewvc?rev=1755511&view=rev
Log:
Add links to JRE bugs.
Disable protection when running on a JRE that is known to be fixed.
Modified:
tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
tomcat/trunk/webapps/docs/changelog.xml
Modified:
tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java?rev=1755511&r1=1755510&r2=1755511&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
Mon Aug 8 15:19:28 2016
@@ -36,6 +36,7 @@ import org.apache.catalina.LifecycleList
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
+import org.apache.tomcat.util.compat.JreCompat;
import org.apache.tomcat.util.compat.JreVendor;
import org.apache.tomcat.util.res.StringManager;
import org.w3c.dom.Document;
@@ -80,6 +81,8 @@ public class JreMemoryLeakPreventionList
* application. This first call will start a GC Daemon thread with the
* thread's context class loader configured to be the web application class
* loader. Defaults to <code>true</code>.
+ *
+ * @see "http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8157570"
*/
private boolean gcDaemonProtection = true;
public boolean isGcDaemonProtection() { return gcDaemonProtection; }
@@ -134,6 +137,8 @@ public class JreMemoryLeakPreventionList
* That thread inherits the context class loader of the current thread, so
* that there may be a web application class loader leak if the web app
* is the first to use <code>LdapPoolManager</code>.
+ *
+ * @see "http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8156824"
*/
private boolean ldapPoolProtection = true;
public boolean isLdapPoolProtection() { return ldapPoolProtection; }
@@ -195,7 +200,7 @@ public class JreMemoryLeakPreventionList
// Trigger the creation of the AWT (AWT-Windows, AWT-XAWT,
// etc.) thread.
// Note this issue is fixed in Java 8 update 05 onwards.
- if (awtThreadProtection) {
+ if (awtThreadProtection && !JreCompat.isJre9Available()) {
java.awt.Toolkit.getDefaultToolkit();
}
@@ -211,8 +216,9 @@ public class JreMemoryLeakPreventionList
* Note: Long.MAX_VALUE is a special case that causes the
thread
* to terminate
*
+ * Fixed in Java 9 onwards (from early access build 130)
*/
- if (gcDaemonProtection) {
+ if (gcDaemonProtection && !JreCompat.isJre9Available()) {
try {
Class<?> clazz = Class.forName("sun.misc.GC");
Method method = clazz.getDeclaredMethod(
@@ -286,6 +292,7 @@ public class JreMemoryLeakPreventionList
// backtrace field. Note that YourKit only shows this field
// when using the HPROF format memory snapshots.
// https://bz.apache.org/bugzilla/show_bug.cgi?id=58486
+ // https://bugs.openjdk.java.net/browse/JDK-8146961
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
try {
DocumentBuilder documentBuilder =
factory.newDocumentBuilder();
@@ -305,7 +312,10 @@ public class JreMemoryLeakPreventionList
}
}
- if (ldapPoolProtection) {
+ /*
+ * Fixed in Java 9 onwards (from early access build 130)
+ */
+ if (ldapPoolProtection && !JreCompat.isJre9Available()) {
try {
Class.forName("com.sun.jndi.ldap.LdapPoolManager");
} catch (ClassNotFoundException e) {
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1755511&r1=1755510&r2=1755511&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Aug 8 15:19:28 2016
@@ -106,6 +106,12 @@
<bug>59888</bug>: Correctly handle tabs and spaces in quoted version
one
cookies when using the <code>Rfc6265CookieProcessor</code>. (markt)
</fix>
+ <fix>
+ A number of the JRE memory leaks addressed by the
+ <code>JreMemoryLeakPreventionListener</code> have been fixed in Java 9
+ so the associated protection is now disabled when running on Java 9
+ onwards. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]