2017/09/26 このエントリーをはてなブックマークに追加 はてなブックマーク - Java SE 9 を雑に見る

Java SE 9 を雑に見る



最近ブログを書いてないなと思い、慌てて書く次第です。



先日、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を使ってみました。
感想としては、まあまあやな。というところです。

http://www.jenv.be/



新バージョンで何が出来るんかなと手探りでやってみます。



  • 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も大丈夫!
(まぁそんなすぐには無くならないですね)







ちょっと茶番っぽいものが入りましたが、大事なものを思い出しました。

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へ各解析コマンドの置き換えが進んでいる?っぽいとの話だったからです。

詳細この辺り
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の情報が見れますね。





そういえばJava SE 9のjavadocはもうネット上に公開されているのかな?
って思ったら英語版だけありました。
https://docs.oracle.com/javase/9/docs/api/overview-summary.html

やばい…集約単位がモジュールになっている。jigsawか。
これ結構お目あてのクラスのjavadoc探すの大変になる(というか面倒になる)んじゃないかなぁと思いました。

しかも全部モジュールはsince9…当たり前だけど。
結局パッケージ単位のsinceの方が分かりやすい。


CDIがJava SEの方にちょこっときたって噂を聞いたけど見つけられなかったー。

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 件のコメント:

コメントを投稿