Jadi pada dasarnya saya mencoba menjalankan tes dalam bentuk:

@Benchmark
@Fork(jvmArgsAppend = "-Djava.lang.invoke.stringConcat=java.lang.invoke.StringConcatFactory.Strategy.BC_SB", value = 1)
public String java9StringBuilder(ThreadState state) {
    // some implementation here
}

Menjalankannya dengan:

java -jar benchmarks.jar MyFullClassNameHere -v extra

Sayangnya gagal dengan forked VM failed with exit code 1 dan tidak ada lagi keluaran "verbose".

Apa yang saya lakukan salah?

Saya mendapatkan peringatan ini:

PERINGATAN: Modul tidak dikenal: org.openjdk ditentukan untuk --add-exports

PERINGATAN: Operasi akses reflektif ilegal telah terjadi

PERINGATAN: Akses reflektif ilegal oleh org.openjdk.jmh.util.Utils (file:/Path/Here/benchmarks.jar) ke bidang java.io.Console.cs

PERINGATAN: Harap pertimbangkan untuk melaporkan ini ke pengelola org.openjdk.jmh.util.Utils

PERINGATAN: Gunakan --illegal-access=warn untuk mengaktifkan peringatan operasi akses reflektif ilegal lebih lanjut

PERINGATAN: Semua operasi akses ilegal akan ditolak dalam rilis mendatang

5
Eugene 27 November 2017, 17:13

1 menjawab

Jawaban Terbaik

Tidak ada yang salah dengan Java 9 dalam contoh ini. Anda memberikan opsi JVM ke VM bercabang, sudahkah Anda mencoba menjalankan dengan opsi itu tanpa JMH terlebih dahulu? Kemudian Anda akan melihat perintahnya salah, dan bentuk yang benar adalah:

- @Fork(jvmArgs = "-Djava.lang.invoke.stringConcat=java.lang.invoke.StringConcatFactory.Strategy.BC_SB")
+ @Fork(jvmArgs = "-Djava.lang.invoke.stringConcat=BC_SB")

...karena BC_SB adalah konstanta enum di java.lang.invoke.StringConcatFactory.Strategy enum.

6
Aleksey Shipilev 28 November 2017, 08:19