On Mon, 6 Feb 2023 15:35:30 GMT, Roger Riggs <rri...@openjdk.org> wrote:
> Please add @bug 8301737 > > It is not going to be obvious why a larger code cashe is needed (and only for > aarch64). > The error message in the .jtr file is `java.rmi.NoSuchObjectException: no such object in table`, which corresponding source code is as follows: <pre><code class="java"> // src/java.rmi/share/classes/sun/rmi/transport/Transport.java 176 if (target == null || (impl = target.getImpl()) == null) { // target is null 177 throw new NoSuchObjectException("no such object in table"); 178 } </code></pre> why target is null with `-Xcomp`? then you see the other source code: <pre><code class="java"> // src/java.rmi//share/classes/sun/rmi/transport/ObjectTable.java 346 private static class Reaper implements Runnable { 347 348 public void run() { 349 try { 350 do { 351 // wait for next cleared weak reference 352 WeakRef weakImpl = (WeakRef) reapQueue.remove(); // Monitor GC here 353 354 synchronized (tableLock) { 355 Target target = implTable.get(weakImpl); 356 if (target != null) { 357 if (!target.isEmpty()) { 358 throw new Error( 359 "object with known references collected"); 360 } else if (target.isPermanent()) { 361 throw new Error("permanent object collected"); 362 } 363 removeTarget(target); // target will be removed after GC. which happen before getTarget() 364 } 365 } 366 } while (!Thread.interrupted()); 367 } catch (InterruptedException e) { 368 // pass away if interrupted 369 } 370 } 371 } So I used `-Xlog:gc` to find that the trigger gc is caused by insufficient codecache. </code></pre> > Can you split the test runs so the original does not run on aarch64 and a new > second run runs only on aarch64. For example, > > ``` > /* > * @test > * @bug 8301737 > * @summary Check that objects are exported with ObjectInputFilters via > UnicastRemoteObject > * @requires os.arch != "aarch64" > * @run testng/othervm FilterUROTest > */ > > /* > * @test > * @summary Check that objects are exported with ObjectInputFilters via > UnicastRemoteObject > * @requires os.arch == "aarch64" > * @run testng/othervm -XX:ReservedCodeCacheSize=512m FilterUROTest > */ > ``` This bug only for LoongArch64 architecture, x86_64 and AArch64 is ok. Perhaps the number of instructions under the LoongArch64 architecture is higher than in aarch64/x86_64. I'm not sure if the s390/risc-v/ppc architecture has the same problem, so I`m only use `@requires os.arch == "loongarch64" `? ------------- PR: https://git.openjdk.org/jdk/pull/12399