How to Use the PowerPoint Template

Similar documents
Oracle パブリック・クラウド・サービス無料トライアル 申込手順書

PowerPoint プレゼンテーション

2

How to Use the PowerPoint Template

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Javaで体験するスクリプト言語の威力

PowerPoint Presentation

Null

Javaの作成の前に

Android Layout SDK プログラミング マニュアル

[3-F] コンテナとJavaとOracle JETによるアプリ開発ハッカソン

[HO-2] NetBeansとGlassFishではじめるJava EE7ハンズオン

Java Day Tokyo 2017 ダウンロード資料

メディプロ1 Javaプログラミング補足資料.ppt

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

Java講座

開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX]

Java知識テスト問題

Red Hat Enterprise Linuxのcron(8)デーモンにデフォルト定義されたtmpwatch命令の動作による、WebOTXのトラブル対処方法

プログラミング基礎I(再)

新・明解Java入門

SpringSecurity

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Microsoft Word - J-jdev_dba_db_developers.doc

第7回 Javascript入門

開発・運用時のガイド JDK11への移行に伴う留意点

JavaプログラミングⅠ

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

intra-mart Accel Platform — IM-BloomMaker プログラミングガイド   初版  

メソッドのまとめ

VB.NETコーディング標準

2 1 Web Java Android Java 1.2 6) Java Java 7) 6) Java Java (Swing, JavaFX) (JDBC) 7) OS 1.3 Java Java

文字列操作と正規表現

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Java演習(4) -- 変数と型 --

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Microsoft PowerPoint - 09.pptx

How to Use the PowerPoint Template

e10s におけるプロセス間通信の基本 219 HACK #34 Components.manager.removeBootstrappedManifestLocati on() function shutdown(adata, areason) { const IOService =

javaone.fla

インストール後のアプリケーション実行

Java言語 第1回

24th Embarcadero Developer Camp

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

storage-sdk-Java

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

HTTP 404 への対処

LDAP Manager SupportList

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

PowerPoint Presentation

データアダプタ概要

IM-SecureSignOn

Transcription:

Nashorn in the Future Oracle Corporation Japan Fusion Middleware Business Unit NISHIKAWA, Akihiro 2015 年 4 月 8 日

Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle s products remains at the sole discretion of Oracle. 2

Agenda 1 2 3 4 What's Nashorn? 8u20 8u40 In the future... 3

What s Nashorn? 4

Nashorn Java 8 から導入された JavaScript Engine (JEP 174) Rhino の置き換え セキュリティ パフォーマンスの向上 InvokeDynamic (JSR-292) の Proof of Concept 5

Nashorn Java 8 から導入された JavaScript Engine (JEP 174) ECMAScript-262 Edition 5.1 javax.script (JSR 223) API Java JavaScript 間での相互呼び出し コマンドラインツールは jjs 6

使ってみよう jjs Hello World Lambda Expression, Stream jjs scripting Web API を呼び出してみる jjs fx WebView 7

Lambda Expression は Function で // Java array.stream().sorted(comparator.naturalorder()).foreach( t -> sortedarray.add(t) ); // Nashorn array.stream().sorted(comparator.naturalorder()).foreach(function(t) sortedarray.add(t)); 8

Java から呼び出す (1) ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getenginebyname("nashorn"); // 評価 engine.eval("print('hello world')"); // hello world engine.eval(new FileReader( hello.js )); // hello.js 9

Java から呼び出す (2) JavaScript の function を呼び出す engine.eval("function hello(name){ print('hello, ' + name); }"); Invocable inv=(invocable)engine; // Hello, Taro Object obj= inv.invokefunction("hello","taro"); 10

Java から呼び出す (3) Script function で Interface を実装する engine.eval("function run(){ print('run() called'); }"); Invocable inv =(Invocable)engine; Runnable r=inv.getinterface(runnable.class); Thread th=new Threads(r); th.start(); th.join(); 11

8u20 12

8u20 2014 年 8 月リリース セキュリティ面の強化 基礎部分のJIT/JDKの強化 13

const を var で置き換え --const-as-var=true false デフォルトは false 8u40 で const をサポートしたので 今後使えなくなる予定 14

Script から Java Package や Class へのアクセスを禁止 --no-java=true false (-nj) デフォルトは false 15

ECMAScript 標準に反する構文の使用を禁止 --no-syntax-extensions (-nse) Java.typeなどのExtensionは利用可 -scripting 併用時には自動的に無効化 16

#sourceurl と @sourceurl JDK-8032068 : implement @sourceurl and #sourceurl directives Eval ソースに名前を付ける //# sourceurl=myscript.js @sourceurl=myscript.js 17

クラスキャッシュ JDK-8021350 : Share script classes between threads/globals within context 当初は内部にキャッシュを保持せず 逐一コンパイル 8u20から 内部にキャッシュを持ち コードを再利用するように 例 :Java から engine.eval(new URLReader(myScriptURL)); JavaScript から load(url); 18

8u40 19

8u40 実装された JEP パフォーマンス改善 Optimistic typing (JEP 196) Code Persistence (JEP 194) セキュリティ Class Filter (JEP 202) ECMAScript 6 仕様の段階的なサポート Lexical-scoped variables and constant definition (JEP 203) 20

JEP 196: Optimistic Typing 楽観的型推論 Java のようなバイトコードを生成するために できるだけ実行時に型推論せずにパフォーマンス向上をはかる 演算および配列のインデックス操作で使用する特定の型 (type) を仮定 仮定した型推論が正しくない場合 仮定を取り消してフォールバック int long double --optimistic-types=true false (-ot) デフォルトは false Object 21

JEP 196: Optimistic Typing 型推論結果のキャッシュ nashorn.typeinfo.maxfiles 型情報をキャッシュするためのファイルの最大個数 0 でキャッシュを保持しない設定 nashorn.typeinfo.cachedir 型情報をキャッシュするファイルが存在するディレクトリ Windows: ${java.io.tmpdir} com.oracle.java.nashorntypeinfo Linux と Solaris: ~/.cache/com.oracle.java.nashorntypeinfo Mac OS X: ~/Library/Caches/com.oracle.java.NashornTypeInfo 22

JEP 194: Code Persistence コードキャッシュによる高速化 同じプロセス内で再利用できるようコードをキャッシュ メモリ使用量の削減ならびに起動時間短縮に寄与 23

JEP 194: Code Persistence コードキャッシュによる高速化 --class-cache-size=50 (-ccs) グローバル スコープ毎のクラス キャッシュサイズ デフォルトサイズは 50 ( 個 ) --persistent-code-cache=true false (-pcc) 楽観的型推論情報 (Optimistic type information) も含め ディスクにコンパイル済みスクリプトを永続化 デフォルトは false 24

JEP 194: Code Persistence コードキャッシュによる高速化 -pcc を指定した場合の型情報の永続先 デフォルトは実行ディレクトリの nashorn_code_cache フォルダ名は変更可能 nashorn.persistent.code.cache システムプロパティ クラスのバイトコードだけでなく様々なメタデータを保持 25

遅延コンパイル --lazy-compilation=true false On Demandでメソッドをコンパイル デフォルトは true 8u31 までは試験的オプションのため false 26

JEP 202: Class Filter JavaScript から Java クラスへのアクセスを抑止 JEP 202: Nashorn Class Filter https://bugs.openjdk.java.net/browse/jdk-8043717 JavaScript を使う Java アプリケーション側で実装 jdk.nashorn.api.scripting.classfilter 27

ClassFilter 実装例 java.io.file を制限したい場合 import jdk.nashorn.api.scripting.classfilter; class MyFilter implements ClassFilter { @Override public boolean exposetoscripts(string s) { if (s.compareto("java.io.file") == 0) return false; return true; } } 28

ECMAScript 6 の段階的なサポート 29

JEP 203: Lexically-scoped variable and constant declarations スコープ内変数 (let) や定数 (const) の宣言 --language=es5 es6 デフォルトは es5 const let を使う場合は --language=es6 が必須 let ブロックに含まれるスコープ内変数の宣言に利用 const let と同様 const を使って宣言した定数はブロック内に生存範囲を限定 30

let と var // let let a=2; function f(x) { // ここでは a は 2 if(x) { let a=42; } // a は 2 のまま } // var var a=2; function f(x) { // ここでは a は未定義 if(x) { var a=42; } // x 次第で a は 42 もしくは未定義 } 31

const // 1) 構文エラー function f(x) { const b=1; // 代入不可 b = 99; } // 2) スコープその 1 function f(x) { const b=1; var z=b+1; //z=2 } //b は未定義 var y=b+1; // 3) スコープその 2 function f(x) { const b=1; var z =b+1; //z=2 } //b は定義可能 const b = 10; 32

Server Side JavaScript 33

Server Side JavaScript JVM で動作する Node.js 互換フレームワーク Nodyn Vert.x + Dyn.JS + Netty Trieme apigee による Node.js 互換フレームワーク 最近はやりの Reactive Programming RxJS React.JS などなど 34

そんな時代もあったね... https://blogs.oracle.com/theaquarium/entry/project_avatar_update 35

In the future... 36

In the Future Java 8u60 9 その先 地道な改善 ウォームアップ時間短縮のための改善 Optimistic Typing Code Persistence の改善 Java 9 ECMAScript 6 のサポート Parser API for Nashorn (JEP 236) Java Flight Recorder JavaScript Profiler Nashorn 用のタグ... などなど 37

地道な改善 例えば 8u60 では JSON パース時の性能向上のために プロパティ情報などの小さな JSON オブジェクトを取り扱う場合 PropertyHashMap#findElement を使うと遅かった jdk.nashorn.internal.parser.jsonparser を書き換え 38

Java Flight Recorder JavaScript Profiler の可能性 39

JEP 236: Parser API for Nashorn ECMAScript AST のための公開 API 目的 ECMAScript のコードを AST として表現するための Parser API Visitor パターン 内部実装パッケージ (jdk.nashorn.internal.ir) を使わせない 注意 Java API( スクリプトレベルの API ではない ) 可能な限り ECMAScript の仕様に基づいて AST ノードを表現 40

JEP 236: Parser API for Nashorn jdk.nashorn.api.tree JDK9 b55 以後で試すことができる JavaDoc https://bugs.openjdk.java.net/br owse/jdk-8048176 41

まとめ 42

まとめ 8u20 8u40 でパフォーマンス向上のための機能が追加されました 今後も Nashorn の開発は続行します 是非フィードバックをお願いします 43

Nashorn Project http://openjdk.java.net/projects/nashorn/ Nashorn Mailing List nashorn-dev@openjdk.java.net Nashorn Wiki https://wiki.openjdk.java.net/display/nashorn/main DEVELOPER_README http://hg.openjdk.java.net/jdk8u/jdk8udev/nashorn/file/tip/docs/developer_readme Nashorn - JavaScript for the JVM http://blogs.oracle.com/nashorn/ 44

Safe Harbor Statement The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle s products remains at the sole discretion of Oracle. 45

46