[ https://issues.apache.org/jira/browse/LUCENE-9117?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dawid Weiss resolved LUCENE-9117. --------------------------------- Resolution: Fixed This may affect how existing systems work (estimate data structure sizes) so I'm leaving it on master only. > RamUsageEstimator hangs with AOT compilation > -------------------------------------------- > > Key: LUCENE-9117 > URL: https://issues.apache.org/jira/browse/LUCENE-9117 > Project: Lucene - Core > Issue Type: Bug > Reporter: Dawid Weiss > Assignee: Dawid Weiss > Priority: Minor > Fix For: master (9.0) > > Attachments: LUCENE-9117.patch > > > Mailing list report by Cleber Muramoto. > {code} > After generating a pre-compiled image lucene-core (8.3.0) with jaotc (JDK > 13.0.1), RamUsageEstimator class is never loaded - it fails to complete the > static initializer. > Steps to reproduce: > 1)Generate the image with > >jaotc --info --ignore-errors --jar > >~/.m2/repository/org/apache/lucene/lucene-core/8.3.0/lucene-core-8.3.0.jar > >--output lucene-core.so > 2)Create a simple test class to trigger class loading > import java.io.IOException; > import java.nio.file.Path; > import java.nio.file.Paths; > import org.apache.lucene.index.IndexWriter; > import org.apache.lucene.index.IndexWriterConfig; > import org.apache.lucene.store.MMapDirectory; > public class TestAOT { > public static void main(String...args){ > run(); > System.out.println("Done"); > } > static void run(){ > try { > var iw = new IndexWriter(MMapDirectory.open(Paths.get("dir")), new > IndexWriterConfig()); > iw.close(); > } catch (IOException e) { > e.printStackTrace(); > } > } > } > 3)Run the class with the pre-compiled image > >java -XX:AOTLibrary=./lucene-core.so -XX:+PrintAOT -cp > >~/.m2/repository/org/apache/lucene/lucene-core/8.3.0/lucene-core-8.3.0.jar > >TestAOT.java > 4)The program never completes. After inspecting it with jstack <pid> it > shows that it's stuck in line 195 of RamUsageEstimator > "main" #1 prio=5 os_prio=0 cpu=174827,04ms elapsed=173,91s > tid=0x00007fe984018800 nid=0x2daf runnable [0x00007fe98bc3c000] > java.lang.Thread.State: RUNNABLE > at > org.apache.lucene.util.RamUsageEstimator.<clinit>(RamUsageEstimator.java:195) > at org.apache.lucene.util.ArrayUtil.<clinit>(ArrayUtil.java:31) > at org.apache.lucene.index.IndexWriter.<clinit>(IndexWriter.java:276) > at TestAOT.run(TestAOT.java:20) > at TestAOT.main(TestAOT.java:14) > at > jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@13.0.1/Native > Method) > at > jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@13.0.1/NativeMethodAccessorImpl.java:62) > at > jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@13.0.1/DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(java.base@13.0.1/Method.java:567) > at > com.sun.tools.javac.launcher.Main.execute(jdk.compiler@13.0.1/Main.java:415) > at > com.sun.tools.javac.launcher.Main.run(jdk.compiler@13.0.1/Main.java:192) > at com.sun.tools.javac.launcher.Main.main(jdk.compiler@13.0.1 > /Main.java:132) > My guess is that the AOT compiler aggressive optimizations like > inlining/scalar replacing calls to Long.valueOf, are working against the > code's desired semantics. > Perhaps the logic to determine LONG_CACHE_[MIN/MAX]_VALUE could be > conditioned to VM version/vendor in Constants class. From [Open|Oracle]JDK > 7 onwards (don't know about older versions) Long cache has a fixed range of > [-128,127], so there's no need to loop until a non-cached boxed value shows > up. > I know this compiler bug isn't Lucene's fault and as a workaround one could > use --compile-for-tiered or exclude RamUsageEstimator's methods from jaotc, > however, it would be nice to have a faster, allocation/loop-free > initializer for RamUsageEstimator nevertheless. > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org