Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
FULL PRODUCT VERSION : java version "1.7.0_04" Java(TM) SE Runtime Environment (build 1.7.0_04-b20) Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode) ADDITIONAL OS VERSION INFORMATION : Linux 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux A DESCRIPTION OF THE PROBLEM : This memory leak is caused by the incorrect use of a WeakHashMap stored in the field sun.security.provider.PolicyFile$PolicyInfo.pdMapping. This WeakHashMap is used as an internal cache. The problem is that under certain circumstances there can be a strong reference chain from a value of a map entry to the associated key. This strong reference chain keeps this entry reachable forever. STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : * Compile the four classes attached to this ticket. * In the current directory, move the class AppManager into a subdirectory 'manager'. * In the current directory, move the class App into a subdirectory 'app'. * In the current directory, move the classes SomePermission and PerAppLibrary into a subdirectory 'per-app-lib'. * Copy the attached file 'system.policy' to the current directory. * Adapt the absolute code source paths in system.policy so that they point to the directories 'manager', 'app' and 'per-app-lib'. * In the current directory: 'java -cp manager -Djava.security.policy=system.policy AppManager' * After waiting for a while, you will see an 'OutOfMemoryError'. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - The free memory values that are printed to the console should remain stable. ACTUAL - The free memory values that are printed to the console decrease, eventually resulting in an OutOfMemoryError. ERROR MESSAGES/STACK TRACES THAT OCCUR : Running app in java.net.URLClassLoader@60ec2ea8 Free memory: 53MB Running app in java.net.URLClassLoader@5bf825cc Free memory: 49MB Running app in java.net.URLClassLoader@6094cbe2 Free memory: 45MB Running app in java.net.URLClassLoader@1d8806f7 Free memory: 41MB Running app in java.net.URLClassLoader@5e34d46a Free memory: 37MB Running app in java.net.URLClassLoader@576f8789 Free memory: 33MB Running app in java.net.URLClassLoader@2b54ae5a Free memory: 29MB Running app in java.net.URLClassLoader@48129552 Free memory: 25MB Running app in java.net.URLClassLoader@40128cad Free memory: 21MB Running app in java.net.URLClassLoader@7e6bc5aa Free memory: 17MB Running app in java.net.URLClassLoader@2994363b Free memory: 13MB Running app in java.net.URLClassLoader@7ffe9999 Free memory: 9MB Running app in java.net.URLClassLoader@76a14c53 Free memory: 5MB Running app in java.net.URLClassLoader@54b749a5 Free memory: 36MB Running app in java.net.URLClassLoader@10c042ab Free memory: 32MB Running app in java.net.URLClassLoader@1704ebb Free memory: 28MB Running app in java.net.URLClassLoader@2073b879 Free memory: 24MB Running app in java.net.URLClassLoader@1c898b41 Free memory: 20MB Running app in java.net.URLClassLoader@20e1ed5b Free memory: 16MB Running app in java.net.URLClassLoader@c3b5587 Free memory: 12MB Running app in java.net.URLClassLoader@29af45f4 Free memory: 8MB Running app in java.net.URLClassLoader@11a40fff Free memory: 8MB Running app in java.net.URLClassLoader@21e8bf76 Free memory: 8MB Running app in java.net.URLClassLoader@131b92e6 Free memory: 8MB Running app in java.net.URLClassLoader@44cae5b8 Free memory: 8MB Running app in java.net.URLClassLoader@5faecf45 Free memory: 8MB Running app in java.net.URLClassLoader@504c2683 Free memory: 8MB Running app in java.net.URLClassLoader@45e4d960 Free memory: 8MB Running app in java.net.URLClassLoader@4706e02e Free memory: 8MB Running app in java.net.URLClassLoader@49deadf0 Free memory: 8MB Running app in java.net.URLClassLoader@8e3cf25 Free memory: 8MB Running app in java.net.URLClassLoader@1471cb25 Free memory: 8MB Running app in java.net.URLClassLoader@e1641c0 Free memory: 8MB Running app in java.net.URLClassLoader@38b72ce1 Free memory: 9MB Running app in java.net.URLClassLoader@1817fe89 Free memory: 9MB Running app in java.net.URLClassLoader@6a998c1 Free memory: 9MB Running app in java.net.URLClassLoader@3b280492 Free memory: 9MB Running app in java.net.URLClassLoader@5f154718 Free memory: 9MB Running app in java.net.URLClassLoader@16fdf48d Free memory: 9MB Running app in java.net.URLClassLoader@2d0651eb Free memory: 9MB Running app in java.net.URLClassLoader@5cfe174 Free memory: 9MB Running app in java.net.URLClassLoader@3be4d6ef Free memory: 9MB Running app in java.net.URLClassLoader@2f0f94a0 Free memory: 9MB Running app in java.net.URLClassLoader@10c1c428 Free memory: 9MB Running app in java.net.URLClassLoader@634e3372 Free memory: 5MB Running app in java.net.URLClassLoader@3d949a87 Free memory: 5MB Running app in java.net.URLClassLoader@183d1102 Free memory: 5MB Running app in java.net.URLClassLoader@6f77e5d4 Free memory: 5MB Running app in java.net.URLClassLoader@16a7bdcd Free memory: 5MB Running app in java.net.URLClassLoader@15dcc3ca Free memory: 5MB Running app in java.net.URLClassLoader@275cea3 Free memory: 5MB Running app in java.net.URLClassLoader@3c626028 Free memory: 5MB Running app in java.net.URLClassLoader@7bc2f501 Free memory: 5MB Running app in java.net.URLClassLoader@79f5910e Free memory: 5MB Running app in java.net.URLClassLoader@6c10a234 Free memory: 6MB Running app in java.net.URLClassLoader@3ddb8962 Free memory: 6MB Running app in java.net.URLClassLoader@124ef122 Free memory: 6MB Running app in java.net.URLClassLoader@1ca53e68 Free memory: 6MB Running app in java.net.URLClassLoader@15e1df6e Free memory: 6MB Running app in java.net.URLClassLoader@4a6a00ca Free memory: 6MB Running app in java.net.URLClassLoader@526a4268 Free memory: 6MB Running app in java.net.URLClassLoader@10be6858 Free memory: 6MB Running app in java.net.URLClassLoader@7de534cb Free memory: 6MB Running app in java.net.URLClassLoader@2be44538 Free memory: 6MB Running app in java.net.URLClassLoader@76c27ba Free memory: 6MB Running app in java.net.URLClassLoader@5c3eeab3 Free memory: 6MB Running app in java.net.URLClassLoader@f6b7e0e Free memory: 6MB Running app in java.net.URLClassLoader@15136019 Free memory: 6MB Running app in java.net.URLClassLoader@3ec2ccac Free memory: 6MB Running app in java.net.URLClassLoader@6a754384 Free memory: 6MB Running app in java.net.URLClassLoader@1ab2f2d6 Free memory: 6MB Running app in java.net.URLClassLoader@4eafccbe Free memory: 6MB Running app in java.net.URLClassLoader@7000bcbc Free memory: 6MB Running app in java.net.URLClassLoader@d6132c4 Free memory: 7MB Running app in java.net.URLClassLoader@3918d722 Free memory: 7MB Running app in java.net.URLClassLoader@490eb6ae Free memory: 7MB Running app in java.net.URLClassLoader@5f2e712f Free memory: 7MB Running app in java.net.URLClassLoader@6a3449a8 Free memory: 7MB Running app in java.net.URLClassLoader@7d206f0 Free memory: 7MB Running app in java.net.URLClassLoader@7ea06d25 Free memory: 7MB Running app in java.net.URLClassLoader@2d11f5f1 Free memory: 7MB Running app in java.net.URLClassLoader@203b4f0e Free memory: 7MB Running app in java.net.URLClassLoader@120773a1 Free memory: 7MB Running app in java.net.URLClassLoader@7a4014a0 Free memory: 7MB Running app in java.net.URLClassLoader@4e5ced83 Free memory: 7MB Running app in java.net.URLClassLoader@3c818737 Free memory: 68MB Running app in java.net.URLClassLoader@1a08777c Free memory: 64MB Running app in java.net.URLClassLoader@3e2f1b1a Free memory: 60MB Running app in java.net.URLClassLoader@c39a867 Free memory: 56MB Running app in java.net.URLClassLoader@6e905272 Free memory: 52MB Running app in java.net.URLClassLoader@1d209d56 Free memory: 48MB Running app in java.net.URLClassLoader@6cd737e3 Free memory: 44MB Running app in java.net.URLClassLoader@17feafba Free memory: 40MB Running app in java.net.URLClassLoader@63c5d81c Free memory: 36MB Running app in java.net.URLClassLoader@6facdcb9 Free memory: 32MB Running app in java.net.URLClassLoader@6c3b0b1e Free memory: 28MB Running app in java.net.URLClassLoader@705063a5 Free memory: 24MB Running app in java.net.URLClassLoader@7b6b340a Free memory: 20MB Running app in java.net.URLClassLoader@75ecda50 Free memory: 16MB Running app in java.net.URLClassLoader@431d00cf Free memory: 12MB Running app in java.net.URLClassLoader@5fd1358f Free memory: 8MB Running app in java.net.URLClassLoader@1e69dff6 Free memory: 8MB Running app in java.net.URLClassLoader@759f6a57 Free memory: 8MB Running app in java.net.URLClassLoader@78952527 Free memory: 8MB Running app in java.net.URLClassLoader@20c92ed6 Free memory: 8MB Running app in java.net.URLClassLoader@79f1d448 Free memory: 8MB Running app in java.net.URLClassLoader@5371ef98 Free memory: 8MB Running app in java.net.URLClassLoader@77c5b2de Free memory: 9MB Running app in java.net.URLClassLoader@2f566b7d Free memory: 9MB Running app in java.net.URLClassLoader@4679cf8c Free memory: 9MB Running app in java.net.URLClassLoader@8bfc25c Free memory: 9MB Running app in java.net.URLClassLoader@3654919e Free memory: 9MB Running app in java.net.URLClassLoader@5c3f1224 Free memory: 9MB Running app in java.net.URLClassLoader@4f0ab3f2 Free memory: 9MB Running app in java.net.URLClassLoader@773de2bd Free memory: 9MB Running app in java.net.URLClassLoader@1a3a2a52 Free memory: 9MB Running app in java.net.URLClassLoader@a5ae1e7 Free memory: 9MB Running app in java.net.URLClassLoader@74904497 Free memory: 9MB Running app in java.net.URLClassLoader@22dd0f87 Free memory: 9MB Running app in java.net.URLClassLoader@48899e6a Free memory: 9MB Running app in java.net.URLClassLoader@433c8540 Free memory: 5MB Running app in java.net.URLClassLoader@28562791 Free memory: 5MB Running app in java.net.URLClassLoader@4678f83a Free memory: 5MB Running app in java.net.URLClassLoader@3eb217d5 Free memory: 5MB Running app in java.net.URLClassLoader@24748417 Free memory: 5MB Running app in java.net.URLClassLoader@2830803a Free memory: 5MB Running app in java.net.URLClassLoader@57543bc5 Free memory: 5MB Running app in java.net.URLClassLoader@759f31de Free memory: 5MB Running app in java.net.URLClassLoader@2f57816a Free memory: 6MB Running app in java.net.URLClassLoader@19cd1d94 Free memory: 6MB Running app in java.net.URLClassLoader@326cbb2d Free memory: 6MB Running app in java.net.URLClassLoader@108543aa Free memory: 6MB Running app in java.net.URLClassLoader@39df3255 Free memory: 6MB Running app in java.net.URLClassLoader@10e80317 Free memory: 6MB Running app in java.net.URLClassLoader@7d0d4ade Free memory: 6MB Running app in java.net.URLClassLoader@6c4cc81c Free memory: 6MB Running app in java.net.URLClassLoader@6162c87a Free memory: 6MB Running app in java.net.URLClassLoader@2c4dd413 Free memory: 6MB Running app in java.net.URLClassLoader@306f7492 Free memory: 6MB Running app in java.net.URLClassLoader@770f3801 Free memory: 6MB Running app in java.net.URLClassLoader@441743be Free memory: 6MB Running app in java.net.URLClassLoader@7ba65cf7 Free memory: 6MB Running app in java.net.URLClassLoader@740f5f97 Free memory: 6MB Running app in java.net.URLClassLoader@77be91c8 Free memory: 6MB Running app in java.net.URLClassLoader@35d3694a Free memory: 6MB Running app in java.net.URLClassLoader@6326c98 Free memory: 6MB Running app in java.net.URLClassLoader@99ffac2 Free memory: 6MB Running app in java.net.URLClassLoader@2e9e53ed Free memory: 6MB Running app in java.net.URLClassLoader@22b1656f Free memory: 7MB Running app in java.net.URLClassLoader@4ffb06c9 Free memory: 7MB Running app in java.net.URLClassLoader@32114a41 Free memory: 7MB Running app in java.net.URLClassLoader@2ce62a39 Free memory: 7MB Running app in java.net.URLClassLoader@2d51e135 Free memory: 7MB Running app in java.net.URLClassLoader@39556aec Free memory: 7MB Running app in java.net.URLClassLoader@778a5d49 Free memory: 7MB Running app in java.net.URLClassLoader@13d5e499 Free memory: 7MB Running app in java.net.URLClassLoader@66a75004 Free memory: 7MB Running app in java.net.URLClassLoader@6d15a113 Free memory: 7MB Running app in java.net.URLClassLoader@165e6c89 Free memory: 7MB Running app in java.net.URLClassLoader@4be07f4b Free memory: 7MB Running app in java.net.URLClassLoader@47b6617 Free memory: 7MB Running app in java.net.URLClassLoader@78ea5d87 Free memory: 7MB Running app in java.net.URLClassLoader@bab5e85 Free memory: 7MB Running app in java.net.URLClassLoader@5d3f79f7 Free memory: 7MB Running app in java.net.URLClassLoader@138532dc Free memory: 6MB Running app in java.net.URLClassLoader@fe9e47 Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at AppManager.runAppInNewClassLoader(AppManager.java:50) at AppManager.main(AppManager.java:27) Caused by: java.lang.OutOfMemoryError: Java heap space at PerAppLibrary.<clinit>(PerAppLibrary.java:3) at App.run(App.java:7) ... 6 more REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- public class App { public void run() { System.out.println("Running app in " + getClass().getClassLoader()); PerAppLibrary.doSomeSomething(); } } *********************************************************************************** import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; public class AppManager { public static final String APP_DIR = "app"; public static final String LIB_DIR = "per-app-lib"; public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException { System.setSecurityManager(new SecurityManager()); while (true) { runAppInNewClassLoader(); printFreeMemory(); } } // Helpers private static void runAppInNewClassLoader() throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException { URL[] urls = { new File(LIB_DIR).toURI().toURL(), new File(APP_DIR).toURI().toURL() }; ClassLoader loader = new URLClassLoader(urls); Class<?> clazz = loader.loadClass("App"); Object app = clazz.newInstance(); Method run = clazz.getDeclaredMethod("run"); run.invoke(app); } private static void printFreeMemory() { Runtime rt = Runtime.getRuntime(); rt.gc(); System.out.println("Free memory: " + rt.freeMemory()/ (1024 * 1024) + "MB"); } } ********************************************************************************************************* public class PerAppLibrary { private static int[] largeArray = new int[1024 * 1024]; public static void doSomeSomething() { SecurityManager s = System.getSecurityManager(); if (s != null) { s.checkPermissio ( This report has more than 16,000 characters and has been truncated. )
|