On Mon, 6 Feb 2023 15:35:30 GMT, Roger Riggs <[email protected]> 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