最近ブログを書いてないなと思い、慌てて書く次第です。
先日、2017/9/21に、Java SE 9とJava EE 8がリリースされたようです。
http://www.publickey1.jp/blog/17/java_ee_8java_9eclipse_foundationjava_ee.html
こんなにリリースって盛り上がらなかったっけw
僕の狭い観測範囲あまりワイワイしてる人が少ないです。
せっかくだしちょっとだけ触ってみようと思います。
ホントちょっとだけ。
Java EEは一旦忘れて、Java SEの方のみ。
導入
オラクルのサイトから普通にダウンロード出来るようになっています。
http://www.oracle.com/technetwork/java/javase/downloads/index.html
その後のうんぬんは割愛しますが、これを機にjenvを使ってみました。
感想としては、まあまあやな。というところです。
あれ出来るかな
新バージョンで何が出来るんかなと手探りでやってみます。
- jrunscript
まずjdkを入れたらこのコマンドを打ちますよね?
$ jrunscript nashorn>
おっ、出来ました。Java 9でも安心してJavaScriptが書けます!
- jjs
まずjdkを入れたらこのコマンドを打ちますよね?
$ jjs jjs>
おっ、出来ました。Java 9でも安心してJavaScriptが(略)
- jvisualvm
jvisualvm Unable to locate an executable at "/usr/local/var/jenv/versions/9/bin/jvisualvm" (-1)
なんてこった!
jvisualvmは今回からjdkには同梱されなくなったという噂は本当っぽいですね(?)
[Java] Visual VM in JDK 9 and Beyond
- jdeps
$jdeps -version
9
なるほど、jdepsも大丈夫!
(まぁそんなすぐには無くならないですね)
jshell
ちょっと茶番っぽいものが入りましたが、大事なものを思い出しました。
Java SE 9ではjshellが入っています。
jshellはJavaのREPLです。
今まではjdk9のアーリーアクセス版とか突っ込むのが地味に面倒だったので、
1回試した以降は敬遠してたんですが、
普通に使えるようになるわけですね。
(地味にhttps://github.com/albertlatacz/java-replのjar落としてjava -jarとかした方が個人的に手軽でした。)
$ jshell | JShellへようこそ -- バージョン9 | 概要については、次を入力してください: /help intro jshell>
おお、ちょっと感動。
/help introと打つと何か始まりそう。
jshell> /help intro | | intro | | jshellツールを使用すると、Javaコードを実行して即座に結果を取得できます。 | int x = 8などのJava定義(変数、メソッド、クラスなど)、 | x + xなどのJava式またはJava文を入力したり、 | インポートしたりできます。 | これらのJavaコードの小さなチャンクを「スニペット」と呼びます。 | | また、/listなどの実行する内容を理解および制御できるjshellコマンドも | あります | | コマンドのリストを参照する場合: /help
愚直に/helpと入力してみます。
jshell> /help | Java言語の式、文または宣言を入力します。 | または、次のコマンドのいずれかを入力します: | /list [<name or id>|-all|-start] | 入力したソースをリストします | /edit <name or id> | 名前またはIDで参照されるソース・エントリを編集します | /drop <name or id> | 名前またはIDで参照されるソース・エントリを削除します | /save [-all|-history|-start] <file> | ファイルにスニペット・ソースを保存します。 | /open <file> | ソースの入力としてファイルを開きます | /vars [<name or id>|-all|-start] | 宣言された変数およびその値をリストします | /methods [<name or id>|-all|-start] | 宣言されたメソッドおよびその署名をリストします | /types [<name or id>|-all|-start] | 宣言された型をリストします | /imports | インポートされたアイテムをリストします | /exit | exit jshell | /env [-class-path <path>] [-module-path <path>] [-add-modules <modules>] ... | 評価コンテキストを表示または変更します | /reset [-class-path <path>] [-module-path <path>] [-add-modules <modules>]... | reset jshell | /reload [-restore] [-quiet] [-class-path <path>] [-module-path <path>]... | リセットして関連する履歴をリプレイします -- 現在または以前(-restore) | /history | 入力した内容の履歴 | /help [<command>|<subject>] | jshellに関する情報を取得します | /set editor|start|feedback|mode|prompt|truncation|format ... | jshell構成情報を設定します | /? [<command>|<subject>] | jshellに関する情報を取得します | /! | 最後のスニペットを再実行します | /<id> | IDでスニペットを再実行します | /-<n> | n回前のスニペットを再実行します | | 詳細は、'/help'の後にコマンドまたはサブジェクトの名前を続けて | 入力してください。 | たとえば、'/help /list'または'/help intro'などです。サブジェクト: | | intro | jshellツールの概要 | shortcuts | スニペットおよびコマンドの補完、情報アクセス、および自動コード生成 | のキーストロークの説明 | context | /env /reloadおよび/resetの評価コンテキスト・オプション
とそんなわけで、いろいろ出来ますね(雑)
適当にオリャってコード書くと普通に動きます。便利。
jshell> java.util.stream.IntStream.rangeClosed(1,10).forEach(System.out::println) 1 2 3 4 5 6 7 8 9 10
/exit
と打つとjshellの対話モードは終了します。
jcmdとか他のコマンドとか
そういえば、jcmdがうんたら、という話を聞いたことがあるので、
ちょっと確認しておきます。
というのも、たしかjcmdへ各解析コマンドの置き換えが進んでいる?っぽいとの話だったからです。
詳細この辺り
https://www.slideshare.net/YaSuenag/java-9-62345544
http://cco.hatenablog.jp/entry/2016/12/01/003730
jstackはexperimentalでサポート対象外らしいですが、
$ jstack Usage: jstack [-l] <pid> (to connect to running process) Options: -l long listing. Prints additional information about locks -h or -help to print this help message
一応コマンド自体は存在してるんですね。
jpsコマンドを打つと、なんかJavaのプロセスのPIDっぽいのが出てきました。このプロセスをjcmdに食わせてみましょう。
$jcmd 13080 help 13080: The following commands are available: VM.native_memory ManagementAgent.stop ManagementAgent.start_local ManagementAgent.start GC.rotate_log Thread.print GC.class_stats GC.class_histogram GC.heap_dump GC.run_finalization GC.run VM.uptime VM.flags VM.system_properties VM.command_line VM.version help
ふむふむ、なるほど。色々見れますね。
例えば、jcmd 13080 Thread.printと入力すると各スレッド情報が見れました。
他にもGCの情報やVMの情報が見れますね。
javadoc
そういえばJava SE 9のjavadocはもうネット上に公開されているのかな?
って思ったら英語版だけありました。
https://docs.oracle.com/javase/9/docs/api/overview-summary.html
やばい…集約単位がモジュールになっている。jigsawか。
これ結構お目あてのクラスのjavadoc探すの大変になる(というか面倒になる)んじゃないかなぁと思いました。
しかも全部モジュールはsince9…当たり前だけど。
結局パッケージ単位のsinceの方が分かりやすい。
Java SEにCDIが同梱されるのではなく、SE向けにCDI機能を提供するという話らしいです。
https://www.jcp.org/en/jsr/detail?id=365
リリースのやり方が変わるんだってね
半年単位でリリースするよ!ってことらしいです。
バージョンのつけ方も変わると。せっかくJava SE 9出たばっかなのにな。
https://www.infoq.com/jp/news/2017/09/Java6Month
18年3月に出るのがJava 18.3、18年9月に出るのがJava 18.9…
モーニング娘。みたいですねw
2100年になったらどうすんだろな。Java 00.3とかかな。2100年問題。
果たして、こち亀並にJavaが続くのかどうかという問題がその前にある。
雑まとめ
なんだかんだjigsawで苦労するから早めに入れちゃいたい!
あとjshell楽しい。
まだまだ調査が足りない!
0 件のコメント:
コメントを投稿