# HG changeset patch # User iklam # Date 1407889741 25200 # Node ID 7585e2404b2ad594254bbcfde5dda82119b0f1db # Parent e0831270085f41a73c22dc8f921c17689dc0b5cc 8046070: Class Data Sharing clean up and refactoring Summary: Cleaned up CDS to be more configurable, maintainable and extensible Reviewed-by: dholmes, coleenp, acorn, mchung diff -r e0831270085f -r 7585e2404b2a jdk/src/share/classes/java/net/URLClassLoader.java --- a/jdk/src/share/classes/java/net/URLClassLoader.java Fri Aug 08 17:47:50 2014 +0000 +++ b/jdk/src/share/classes/java/net/URLClassLoader.java Tue Aug 12 17:29:01 2014 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -407,6 +407,29 @@ return pkg; } + // Also called by VM to define Package for classes loaded from the CDS + // archive + private void definePackageInternal(String pkgname, Manifest man, URL url) + { + if (getAndVerifyPackage(pkgname, man, url) == null) { + try { + if (man != null) { + definePackage(pkgname, man, url); + } else { + definePackage(pkgname, null, null, null, null, null, null, null); + } + } catch (IllegalArgumentException iae) { + // parallel-capable class loaders: re-verify in case of a + // race condition + if (getAndVerifyPackage(pkgname, man, url) == null) { + // Should never happen + throw new AssertionError("Cannot find package " + + pkgname); + } + } + } + } + /* * Defines a Class using the class bytes obtained from the specified * Resource. The resulting Class must be resolved before it can be @@ -420,23 +443,7 @@ String pkgname = name.substring(0, i); // Check if package already loaded. Manifest man = res.getManifest(); - if (getAndVerifyPackage(pkgname, man, url) == null) { - try { - if (man != null) { - definePackage(pkgname, man, url); - } else { - definePackage(pkgname, null, null, null, null, null, null, null); - } - } catch (IllegalArgumentException iae) { - // parallel-capable class loaders: re-verify in case of a - // race condition - if (getAndVerifyPackage(pkgname, man, url) == null) { - // Should never happen - throw new AssertionError("Cannot find package " + - pkgname); - } - } - } + definePackageInternal(pkgname, man, url); } // Now read the class bytes and define the class java.nio.ByteBuffer bb = res.getByteBuffer();