RFR: JDK-8080511 - Refresh of jimage support

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Fri Jul 24 17:10:56 UTC 2015


After the latest merge I got some issue, I assume related to this fix.
Can somebody take a look to this code:

import java.net.URI;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

public class JRTFileSystemError {

     public static void main(final String[] args) throws Exception {
         FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/"));
         Files.walkFileTree(fs.getPath("/java.desktop"), new 
SimpleFileVisitor<Path>() {
             @Override
             public FileVisitResult visitFile(Path file,
                                              BasicFileAttributes attrs) {
                 return FileVisitResult.CONTINUE;
             }
         });
     }
}

It fails with "Exception in thread "main" 
java.nio.file.NoSuchFileException: /java.desktop".
Bur previously it works correctly. Can somebody confirm this is an issue 
in the test(and how to change it) or in jdk?
It seems that IntelliJ also broken in some way so it cannot take classes 
from the jdk9 after this fix. probably they should update jrt-fs.jar?


On 23.06.15 19:08, Jean-Francois Denise wrote:
> Hi,
> an updated webrev that takes into account reviews. In addition the hotspot tests have been reworked following Christian Tornqvist suggestions.
>
> top: http://cr.openjdk.java.net/~jfdenise/hs-rt-jimage.3/webrev-top/
> langtools: http://cr.openjdk.java.net/~jfdenise/hs-rt-jimage.3/webrev-langtools/
> hotspot: http://cr.openjdk.java.net/~jfdenise/hs-rt-jimage.3/webrev-hotspot/
> jdk: http://cr.openjdk.java.net/~jfdenise/hs-rt-jimage.3/webrev-jdk/
>
> Testing:
> JCK(s) tests are passing (ran only on Mac OS)
> Hotspot tests are passing (All platforms)
> Java PIT tests are passing (All platforms). Ran once on https://bugs.openjdk.java.net/browse/JDK-8129592
>
> Thanks.
> JF
>
> On 23 Jun 2015, at 14:10, Jean-Francois Denise <jean-francois.denise at oracle.com> wrote:
>
>> Hi Paul,
>>
>> On 19 Jun 2015, at 16:39, Paul Sandoz <paul.sandoz at oracle.com> wrote:
>>
>>> On Jun 18, 2015, at 2:08 AM, Jim Laskey (Oracle) <james.laskey at oracle.com> wrote:
>>>
>>>> https://bugs.openjdk.java.net/browse/JDK-8080511
>>>>
>>>> This is an long overdue refresh of the jimage support in the JDK9-dev repo.  This includes native support for reading jimage files, improved jrt-fs (java runtime file system) support for retrieving modules and packages from the runtime, and improved performance for langtools in the presence of jrt-fs.
>>>>
>>>> http://cr.openjdk.java.net/~jlaskey/hs-rt-jimage/webrev-top <http://cr.openjdk.java.net/~jlaskey/hs-rt-jimage/webrev-top>
>>>> http://cr.openjdk.java.net/~jlaskey/hs-rt-jimage/webrev-jdk <http://cr.openjdk.java.net/~jlaskey/hs-rt-jimage/webrev-jdk>
>>> I eyeballed the JDK changes. Just two thing:
>>>
>>> make/src/classes/build/tools/module/ModuleArchive.java
>>>
>>> 90     @Override
>>> 91     public Stream<Entry> entries() {
>>> 92         List<Entry> entries = new ArrayList<>();
>>> 93         try {
>>> 94             if (classes != null)
>>> 95                 Files.walk(classes)
>>> 96                         .sorted()
>>> 97                         .filter(p -> !Files.isDirectory(p)
>>> 98                                 && !classes.relativize(p).toString().startsWith("_the.")
>>> 99                                 && !classes.relativize(p).toString().equals("javac_state"))
>>> 100                         .map(p -> toEntry(p, classes, EntryType.CLASS_OR_RESOURCE))
>>> 101                         .forEach(entries::add);
>>> 102             if (cmds != null)
>>> 103                 Files.walk(cmds)
>>> 104                         .filter(p -> !Files.isDirectory(p))
>>> 105                         .map(p -> toEntry(p, cmds, EntryType.NATIVE_CMD))
>>> 106                         .forEach(entries::add);
>>> 107             if (libs != null)
>>> 108                 Files.walk(libs)
>>> 109                         .filter(p -> !Files.isDirectory(p))
>>> 110                         .map(p -> toEntry(p, libs, EntryType.NATIVE_LIB))
>>> 111                         .forEach(entries::add);
>>> 112             if (configs != null)
>>> 113                 Files.walk(configs)
>>> 114                         .filter(p -> !Files.isDirectory(p))
>>> 115                         .map(p -> toEntry(p, configs, EntryType.CONFIG))
>>> 116                         .forEach(entries::add);
>>> 117         } catch (IOException ioe) {
>>> 118             throw new UncheckedIOException(ioe);
>>> 119         }
>>> 120         return entries.stream();
>>> 121     }
>>>
>>> You can use collect(toList())
>> ==> OK collect used. In addition, filter first then sort, tryWithResource for 4 Files stream.
>>
>>> In general the contract for Archive.entries probably has to say the stream needs to be closed after use since it might cover lazy I/O based resources, so callers will need to use a try-with-resources block.
>> ==> Added a note in javadoc, implemented explicit close for non lazy streams, added missing tryWithResource. Added a comment on what should be done in ModuleArchive to keep laziness.
>>> Paul.
>> Thanks.
>>
>>>> http://cr.openjdk.java.net/~jlaskey/hs-rt-jimage/webrev-hotspot <http://cr.openjdk.java.net/~jlaskey/hs-rt-jimage/webrev-hotspot>
>>>> http://cr.openjdk.java.net/~jlaskey/hs-rt-jimage/webrev-langtools <http://cr.openjdk.java.net/~jlaskey/hs-rt-jimage/webrev-langtools>
>>>>
>>>>
>>>> Details:
>>>>
>>>> - jrt-fs provides access, via the nio FileSystem API, to the classes in a .jimage file, organized by module or by package.
>>>> - Shared code for jimage support converted to native.  Currently residing in hotspot, but will migrate to it’s own jdk library https://bugs.openjdk.java.net/browse/JDK-8087181 <https://bugs.openjdk.java.net/browse/JDK-8087181>
>>>> - A new archive abstraction for class/resource sources.
>>>> - java based implementation layer for jimage reading to allow backport to JDK8 (jrt-fs.jar - IDE support.)
>>>> - JNI support for jimage into hotspot.
>>>> - White box tests written to exercise native jimage support.


-- 
Best regards, Sergey.



More information about the hotspot-runtime-dev mailing list