Java SE 9 の予習 その3
Java SE 9 の予習 その3です。
今回のエントリーは JShell です。
JShell は多くの開発者から期待されておりネット上に情報があふれています。
特に「最新Java情報局」の連載記事は解りやすくお勧めです。
そこで今回のエントリーは「こんな使い方はしないだろう」という内容のものを書きます。
つまり、ただのお遊びです。
でもネット上でこの情報を見ることができるのは此処だけかもしれませんよ。(^_^;
それだけ必要がない無駄な情報と言えます。
それでは過去のエントリーをまずご覧ください。
Java ではよく知られている IntegerCache 問題です。
これは JVM オプションを設定することにより変更が可能です。
-XX:AutoBoxCacheMax=<size>
これを JShell で設定してうごかしてみたいと思いませんか?
思わない・・・ そう、普通は思いませんよね。
でも、私は天の邪鬼な人間なのでどうすればいいか必死になってググりました。
でもヒットせず twitter で泣きながらつぶやいたら「ジャバチョットデキル」優しい人達に救われました。
JShell は「Java SE 9のProject Kulla、JShellの動作とJShell API」の記事「JShellの動作」にあるように
JShell process と Java process のふたつの JVM が立ち上がっています。
つまり、JShell process からリモート JVM の Java process にコンパイルされたバイトコードを渡し実行した結果を返してもらっているようです。
だからリモート JVM に JVM オプションを設定しなければなりません。
まず、JShell を起動します。
次に IntegerCache 問題のコードを入力していきます。
ちゃんと false となっています。
これを true にするために下記の JVM オプションを JShell 起動コマンドに追加します。
-R-XX:AutoBoxCacheMax=128
期待通りに true になってくれました。
次はプログラムから JShell API を使ってみようと思います。
今回のようにリモート JVM オプションを設定したり、コンパイルオプションを設定してみました。
またプログラムから JShell API を使うときに思い込みから「あれれ?」となったことも。
ちょっと今日は遅くなってしまったので次回にそれらは書く予定です。
それでは G’Night! Zzz…
TAGS: Java | 2017年5月17日10:29 PM | Comment : 0