• BPnet
  • ビジネス
  • IT
  • テクノロジー
  • 医療
  • 建設・不動産
  • TRENDY
  • WOMAN
  • ショッピング
  • 転職
  • ナショジオ
  • 日経電子版
  • PR

  • PR

  • PR

  • PR

  • PR

最新Java情報局

Java SE 9のProject Kulla、JShellの動作とJShell API

櫻庭 祐一=Java in the Box 2017/03/23 ITpro

 3回に渡ってProject Kullaで提供しているJShellの使い方について紹介してきました。今回は、ちょっと趣向を変えて、JShellが提供しているAPI、JShell APIについて解説します。

 JShell APIを使えば、アプリケーションにJShellの機能を取り入れることができます。JShell APIを使用するには、JShellの動作モデルの理解が必要です。そこで、JShell APIを紹介する前に、JShellがどのように動いているのかについて解説します。

JShellの動作

 JShellは意外に内部では複雑なことを行っています。試しに、JShellを起動してから、OSで実行しているプロセスを見てみましょう。JShellが実行されているのはもちろんですが、それ以外にjavaが動いていることが分かるはずです。

 実をいうと、JShellはJavaのスニペットを実行するために、もう1つのJVMを使用します。そのため、JShell以外に、javaが起動しているのです。JShell動作時の構成を図1に示しました。

図1●JShellの構成

 前述したように、JShellは2つのプロセスから構成されます。JShellはターミナルの制御に、OSSのjlineライブラリーを使用しています。JShellはjlineを利用して、カーソルの位置制御や補完機能を実現しています。

 jlineからスニペットを受け取るのがJShellToolクラスです。スニペットの評価、実行の中心となるのがJSehll APIです。JShell APIはJShellToolクラスから受け取ったスニペットをまず解釈します。そして、スニペットを実行できるように、スニペットをラップしたクラスを作成します。

 作成したクラスをコンパイルするのがCompiler APIです。Compiler APIはJava SE 6で導入された、クラスを動的にコンパイルするためのAPIです。詳しくは、「Java SE 6完全攻略」第89回 プログラムからコンパイル - Compiler API その1をご参照ください。

 JShell APIはコンパイルされたバイトコードを、もう一方のjavaプロセスにロード、実行を委譲します。このときに、JVMの制御が必要になるのですが、これを行うためにJDI(Java Debugger Interface)を使用してJVMにアクセスします。

 JDIはデバッガのためのインタフェースなので、JVMの制御はお手のものです。JShell APIはラップしたクラスを実行した結果を受け取るだけでなく、標準出力や標準エラー出力への出力も受け取ります。それらを合わせて、JShellToolクラスに戻し、jlineを使用して表示します。

 このようにして、JShellはスニペットの入力から結果の表示までを行っているのです。

ここから先はITpro会員(無料)の登録が必要です。

次ページ デバッグモード
  • 1
  • 2
  • 3
  • 4

あなたにお薦め

連載新着

連載目次を見る

今のおすすめ記事

  • 【GWスペシャル2017】

    試してみよう!五月病にならないGWの過ごし方

     五月病は、ゴールデンウイーク(GW)明けに発症する病気だ。うつ病に似たもので、抑うつや無気力、不安や焦りなどの症状が現れる。放っておくと出社できなくなることも。五月病にならないGWの過ごし方を、IT企業などで健康指導を行う保健師・金橋治美氏に聞いた。

ITpro SPECIALPR

What’s New!

経営

アプリケーション/DB/ミドルウエア

クラウド

運用管理

設計/開発

サーバー/ストレージ

クライアント/OA機器

ネットワーク/通信サービス

セキュリティ

もっと見る