How to Use the PowerPoint Template



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

5-D オラクルコンサルが語るJava SE 8の勘所

Oracle Text 概要

為 が 行 われるおそれがある 場 合 に 都 道 府 県 公 安 委 員 会 がその 指 定 暴 力 団 等 を 特 定 抗 争 指 定 暴 力 団 等 として 指 定 し その 所 属 する 指 定 暴 力 団 員 が 警 戒 区 域 内 において 暴 力 団 の 事 務 所 を 新 たに 設


( 別 途 調 査 様 式 1) 減 損 損 失 を 認 識 するに 至 った 経 緯 等 1 列 2 列 3 列 4 列 5 列 6 列 7 列 8 列 9 列 10 列 11 列 12 列 13 列 14 列 15 列 16 列 17 列 18 列 19 列 20 列 21 列 22 列 固 定

景品の換金行為と「三店方式」について

< F2D A C5817A C495B6817A>

<4D F736F F D E718CF68D C768E5A8F9197DE>

How to Use the PowerPoint Template

リング 不 能 な 将 来 減 算 一 時 差 異 に 係 る 繰 延 税 金 資 産 について 回 収 可 能 性 がないも のとする 原 則 的 な 取 扱 いに 対 して スケジューリング 不 能 な 将 来 減 算 一 時 差 異 を 回 収 できることを 反 証 できる 場 合 に 原 則

損 益 計 算 書 ( 平 成 25 年 10 月 1 日 から 平 成 26 年 9 月 30 日 まで) ( 単 位 : 千 円 ) 科 目 金 額 営 業 収 益 304,971 営 業 費 用 566,243 営 業 総 損 失 261,271 営 業 外 収 益 受 取 利 息 3,545

養 老 保 険 の 減 額 払 済 保 険 への 変 更 1. 設 例 会 社 が 役 員 を 被 保 険 者 とし 死 亡 保 険 金 及 び 満 期 保 険 金 のいずれも 会 社 を 受 取 人 とする 養 老 保 険 に 加 入 してい る 場 合 を 解 説 します 資 金 繰 りの 都

PowerPoint プレゼンテーション

平 成 27 年 11 月 ~ 平 成 28 年 4 月 に 公 開 の 対 象 となった 専 門 協 議 等 における 各 専 門 委 員 等 の 寄 附 金 契 約 金 等 の 受 取 状 況 審 査 ( 別 紙 ) 専 門 協 議 等 の 件 数 専 門 委 員 数 500 万 円 超 の 受

は 固 定 流 動 及 び 繰 延 に 区 分 することとし 減 価 償 却 を 行 うべき 固 定 の 取 得 又 は 改 良 に 充 てるための 補 助 金 等 の 交 付 を 受 けた 場 合 にお いては その 交 付 を 受 けた 金 額 に 相 当 する 額 を 長 期 前 受 金 とし

第2回 制度設計専門会合 事務局提出資料

第316回取締役会議案

1. 前 払 式 支 払 手 段 サーバ 型 の 前 払 式 支 払 手 段 に 関 する 利 用 者 保 護 等 発 行 者 があらかじめ 利 用 者 から 資 金 を 受 け 取 り 財 サービスを 受 ける 際 の 支 払 手 段 として 前 払 式 支 払 手 段 が 発 行 される 場 合

治 験 実 施 管 理 システム NMGCP 向 け Excel 形 式 プロトコール 作 成 手 順 書 V4.0.3 対 応 版 第 1 版 株 式 会 社 富 士 通 アドバンストエンジニアリング All Rights Reserved,Copyright 株 式 会 社 富 士 通 アドバン

国 税 クレジットカード 納 付 の 創 設 国 税 のクレジットカード 納 付 については マイナンバー 制 度 の 活 用 による 年 金 保 険 料 税 に 係 る 利 便 性 向 上 に 関 するアクションプログラム( 報 告 書 ) においてその 導 入 の 方 向 性 が 示 されている

Taro-別紙1 パブコメ質問意見とその回答

事 業 税 の 外 形 標 準 課 税 事 業 税 は 都 道 府 県 が 所 得 ( 利 益 )に 対 して 課 税 します 1. 個 人 事 業 税 業 種 区 分 税 率 ( 標 準 税 率 ) 第 1 種 事 業 ( 物 品 販 売 業 製 造 業 金 銭 貸 付 業 飲 食 店 業 不 動

<4D F736F F D2095BD90AC E D738FEE816A939A905C91E D862E646F63>

Microsoft Word 差替_【900】(旧69)「交代」120111CL.docx

事前チェック提出用現況報告書作成ツール入力マニュアル(法人用)

2. 会 計 規 程 の 業 務 (1) 規 程 と 実 際 の 業 務 の 調 査 規 程 や 運 用 方 針 に 規 定 されている 業 務 ( 帳 票 )が 実 際 に 行 われているか( 作 成 されている か)どうかについて 調 べてみた 以 下 の 表 は 規 程 の 条 項 とそこに

入札公告 機動装備センター

<4D F736F F D F4390B3208A948C E7189BB8CE F F8C668DDA97702E646F63>

Speed突破!Premium問題集 基本書サンプル

Microsoft PowerPoint 資料6 技術基準.ppt [互換モード]

(別紙3)保険会社向けの総合的な監督指針の一部を改正する(案)

(1) 貸 借 対 照 表 ( 平 成 26 年 11 月 30 日 現 在 ) ( 単 位 : 千 円 ) 資 産 の 部 負 債 の 部 科 目 金 額 科 目 金 額 流 動 資 産 4,623,985 流 動 負 債 3,859,994 現 金 及 び 預 金 31,763 支 払 手 形

<4D F736F F D208ED089EF95DB8CAF89C193FC8FF38BB CC8EC091D492B28DB88C8B89CA82C982C282A282C42E646F63>

理化学研究所の役職員への兼業(兼職)依頼について

目 次 1.はじめに 書 式 の 説 明 表 紙 スケジュール 組 入 れ 基 準 併 用 禁 止 薬 併 用 注 意 薬 同 種 同 効 薬 医 師 モニタリング..

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

[2] 控 除 限 度 額 繰 越 欠 損 金 を 有 する 法 人 において 欠 損 金 発 生 事 業 年 度 の 翌 事 業 年 度 以 後 の 欠 損 金 の 繰 越 控 除 にあ たっては 平 成 27 年 度 税 制 改 正 により 次 ページ 以 降 で 解 説 する の 特 例 (

Box-Jenkinsの方法

H28記入説明書(納付金・調整金)8

MetaMoJi ClassRoom/ゼミナール 授業実施ガイド

2. 番 号 種 別 の 利 用 方 法 わが 国 の 番 号 方 式 に 照 らして INSネットでの 番 号 種 別 の 具 体 的 な 利 用 方 法 を 記 述 すると 以 下 のようにな ります (1) 番 号 種 別 (TON)= 不 定 電 話 サービスと 同 様 のダイヤル 手 順

Microsoft Word - 不正アクセス行為の禁止等に関する法律等に基づく公安

(1)1オールゼロ 記 録 ケース 厚 生 年 金 期 間 A B 及 びCに 係 る 旧 厚 生 年 金 保 険 法 の 老 齢 年 金 ( 以 下 旧 厚 老 という )の 受 給 者 に 時 効 特 例 法 施 行 後 厚 生 年 金 期 間 Dが 判 明 した Bは 事 業 所 記 号 が

対 象 者 株 式 (1,287,000 株 ) 及 び 当 社 が 所 有 する 対 象 者 株 式 (1,412,000 株 )を 控 除 した 株 式 数 (3,851,673 株 )になります ( 注 3) 単 元 未 満 株 式 も 本 公 開 買 付 けの 対 象 としております なお


している 5. これに 対 して 親 会 社 の 持 分 変 動 による 差 額 を 資 本 剰 余 金 として 処 理 した 結 果 資 本 剰 余 金 残 高 が 負 の 値 となるような 場 合 の 取 扱 いの 明 確 化 を 求 めるコメントが 複 数 寄 せられた 6. コメントでは 親

4 乙 は 天 災 地 変 戦 争 暴 動 内 乱 法 令 の 制 定 改 廃 輸 送 機 関 の 事 故 その 他 の 不 可 抗 力 により 第 1 項 及 び 第 2 項 に 定 める 業 務 期 日 までに 第 1 条 第 3 項 の 適 合 書 を 交 付 することができない 場 合 は

損 益 計 算 書 自. 平 成 26 年 4 月 1 日 至. 平 成 27 年 3 月 31 日 科 目 内 訳 金 額 千 円 千 円 営 業 収 益 6,167,402 委 託 者 報 酬 4,328,295 運 用 受 託 報 酬 1,839,106 営 業 費 用 3,911,389 一

(Microsoft Word - \203A \225\345\217W\227v\227\314 .doc)

目     次

1 書 誌 作 成 機 能 (NACSIS-CAT)の 軽 量 化 合 理 化 電 子 情 報 資 源 への 適 切 な 対 応 のための 資 源 ( 人 的 資 源,システム 資 源, 経 費 を 含 む) の 確 保 のために, 書 誌 作 成 と 書 誌 管 理 作 業 の 軽 量 化 を 図

<重要な会計方針及び注記>

⑨持分法基準

連 結 損 益 計 算 書 売 上 高 及 びその 他 の 営 業 収 入 営 業 費 用 売 上 原 価 販 売 費 及 び 一 般 管 理 費 研 究 開 発 費 営 業 費 用 合 計 営 業 利 益 営 業 外 収 益 ( 費 用 ) 受 取 利 息 支 払 利 息 営 業 外 収 益 (

Microsoft Word - (会社法用) 期_02.計算書類.doc

03_主要処理画面.xlsx

Microsoft Word - 事業報告_監査法人用_FINAL.doc

Microsoft Word - 公表用答申422号.doc

施 工 P お 気 に 入 り データを 活 用 するための 準 備 施 工 パッケージデータをお 気 に 入 りに 登 録 し 単 価 を 閲 覧 するための 方 法 を 説 明 します 1. 施 工 パッケージデータをダウンロードする 施 工 パッケージデータのダウンロードは 下 記 から 行

Taro-匿名組合 151009 栄

(5) 給 与 制 度 の 総 合 的 見 直 しの 実 施 状 況 について 概 要 の 給 与 制 度 の 総 合 的 見 直 しにおいては 俸 給 表 の 水 準 の 平 均 2の 引 き 下 げ 及 び 地 域 手 当 の 支 給 割 合 の 見 直 し 等 に 取 り 組 むとされている

Microsoft Word - 結果・異動プレス_ _clean.doc

公文書非公開決定処分に関する諮問について(答申)

空 き 家 を 売 却 した 場 合 の,000 万 円 控 除 特 例 の 創 設 被 相 続 人 が 住 んでいた 家 屋 及 びその 敷 地 を 相 続 があった 日 から 年 を 経 過 する 年 の 月 日 までに 耐 震 工 事 をしてから あるいは 家 を 除 却 し てから 売 却

質 問 票 ( 様 式 3) 質 問 番 号 62-1 質 問 内 容 鑑 定 評 価 依 頼 先 は 千 葉 県 などは 入 札 制 度 にしているが 神 奈 川 県 は 入 札 なのか?または 随 契 なのか?その 理 由 は? 地 価 調 査 業 務 は 単 にそれぞれの 地 点 の 鑑 定

FXレバレッジ規制「最大25倍」の意味

特別徴収封入送付作業について

(Microsoft PowerPoint \213\306\213\226\211\302\215X\220V\220\340\226\276\211\357\201i3\201j)

<4D F736F F D2091E F18CB48D C481698E7B90DD8F9590AC89DB816A2E646F63>

<4D F736F F D A94BD837D836C B4B92F62E646F6378>

4 承 認 コミュニティ 組 織 は 市 長 若 しくはその 委 任 を 受 けた 者 又 は 監 査 委 員 の 監 査 に 応 じなければ ならない ( 状 況 報 告 ) 第 7 条 承 認 コミュニティ 組 織 は 市 長 が 必 要 と 認 めるときは 交 付 金 事 業 の 遂 行 の

実行時のメモリ構造\(2\) Javaスタック内のフレーム間動作

疑わしい取引の参考事例

Microsoft Word - 佐野市生活排水処理構想(案).doc

(1) 社 会 保 険 等 未 加 入 建 設 業 者 の 確 認 方 法 等 受 注 者 から 提 出 される 施 工 体 制 台 帳 及 び 添 付 書 類 により 確 認 を 行 います (2) 違 反 した 受 注 者 へのペナルティー 違 反 した 受 注 者 に 対 しては 下 記 のペ

私立大学等研究設備整備費等補助金(私立大学等

ができます 4. 対 象 取 引 の 範 囲 第 1 項 のポイント 付 与 の 具 体 的 な 条 件 対 象 取 引 自 体 の 条 件 は 各 加 盟 店 が 定 めます 5.ポイントサービスの 利 用 終 了 その 他 いかなる 理 由 によっても 付 与 されたポイントを 換 金 すること

Taro-契約条項(全部)

<4D F736F F F696E74202D C90BF8F CC8DEC90AC97E181698A4F8D E8816A5F56322E707074>

はファクシミリ 装 置 を 用 いて 送 信 し 又 は 訪 問 する 方 法 により 当 該 債 務 を 弁 済 す ることを 要 求 し これに 対 し 債 務 者 等 から 直 接 要 求 しないよう 求 められたにもかか わらず 更 にこれらの 方 法 で 当 該 債 務 を 弁 済 するこ

Taro-○離島特産品等マーケティング支援事業に係る企画提案募集要領

答申第585号

1 林 地 台 帳 整 備 マニュアル( 案 )について 林 地 台 帳 整 備 マニュアル( 案 )の 構 成 構 成 記 載 内 容 第 1 章 はじめに 本 マニュアルの 目 的 記 載 内 容 について 説 明 しています 第 2 章 第 3 章 第 4 章 第 5 章 第 6 章 林 地

ていることから それに 先 行 する 形 で 下 請 業 者 についても 対 策 を 講 じることとしまし た 本 県 としましては それまでの 間 に 未 加 入 の 建 設 業 者 に 加 入 していただきますよう 28 年 4 月 から 実 施 することとしました 問 6 公 共 工 事 の

<91E682548FCD91E DF F323731>

指 定 ( 又 は 選 択 ) 官 庁 PCT 出 願 人 の 手 引 - 国 内 段 階 - 国 内 編 - アイスランド 特 許 庁 国 内 段 階 に 入 るための 要 件 の 概 要 3 頁 概 要 国 内 段 階 に 入 るための 期 間 PCT 第 22 条 (3)に 基 づく 期 間

4 参 加 資 格 要 件 本 提 案 への 参 加 予 定 者 は 以 下 の 条 件 を 全 て 満 たすこと 1 地 方 自 治 法 施 行 令 ( 昭 和 22 年 政 令 第 16 号 ) 第 167 条 の4 第 1 項 各 号 の 規 定 に 該 当 しない 者 であること 2 会 社


WEB版「新・相続対策マスター」(ご利用の手引き)

<4D F736F F D E91E6318E6C94BC8AFA925A904D D838A815B8BA693AF8E9497BF2E646F63>

学校法人日本医科大学利益相反マネジメント規程

Microsoft Word - H20中小会計指針新旧対照表 doc

1_2013BS(0414)

第 41 期

<4D F736F F D203193FA8AD45F95CA8E86325F89898F4B315F94F093EF8AA98D AD97DF914F82CC8FEE95F182CC8EFB8F C28E8B89BB2E646F63>

定款  変更

スライド 1

平 成 24 年 4 月 1 日 から 平 成 25 年 3 月 31 日 まで 公 益 目 的 事 業 科 目 公 1 公 2 公 3 公 4 法 人 会 計 合 計 共 通 小 計 苦 情 相 談 解 決 研 修 情 報 提 供 保 証 宅 建 取 引 健 全 育 成 Ⅰ. 一 般 正 味 財

ご 注 意 (1) 本 書 の 内 容 の 一 部 又 は 全 部 を 無 断 で 転 載 することは 禁 止 されています (2) 本 書 の 内 容 は 将 来 予 告 無 しに 変 更 することがあります (3) 本 書 の 内 容 は 万 全 を 期 して 作 成 しておりますが ご 不 審

Transcription:

Lambda: A Peek Under The Hood 日 本 オラクル 株 式 会 社 Java SE サステイニング エンジニアリング バック デイビッド Java Day Tokyo 2015 2015 年 4 月 8 日

以 下 の 事 項 は 弊 社 の 一 般 的 な 製 品 の 方 向 性 に 関 する 概 要 を 説 明 するものです また 情 報 提 供 を 唯 一 の 目 的 とするものであり いかなる 契 約 にも 組 み 込 むこ とはできません 以 下 の 事 項 は マテリアルやコード 機 能 を 提 供 することを コミットメント( 確 約 )するものではないため 購 買 決 定 を 行 う 際 の 判 断 材 料 になさらないで 下 さい オラクル 製 品 に 関 して 記 載 されている 機 能 の 開 発 リ リースおよび 時 期 については 弊 社 の 裁 量 により 決 定 されます OracleとJavaは Oracle Corporation 及 びその 子 会 社 関 連 会 社 の 米 国 及 びその 他 の 国 における 登 録 商 標 です 文 中 の 社 名 商 品 名 等 は 各 社 の 商 標 または 登 録 商 標 である 場 合 があります Oracle Confidential 4

自 己 紹 介 バック デイビッド Java SE サステイニング エンジニアリング JVM のバグを 直 す 人 趣 味 :プログラミング

予 定 背 景 目 標 JSR-292 の 紹 介 Invoke Dynamic MethodHandle ラムダ 式 の 実 装 javac の 出 力 Java SE Runtime の 実 装

目 標 ラムダ 式 に 該 当 するバイトコードを 理 解 する ラムダ 式 のパフォーマンスの 影 響 を 把 握 する

寄 り 道 ラムダ 式 の 実 装 を 理 解 するには ラムダ 式 (Java 言 語 レベル) Java バイトコード JSR 292 ( 動 的 なメソッド 呼 び 出 し) JSR-292 分 かる 方 は 少 し 珍 しいので 今 日 先 にカバーします

JSR-292 ( 動 的 なメソッド 呼 び 出 し)

Da Vinci Machine Project Java 以 外 の 言 語 を 使 っても JVM はいい 仮 想 マシン パフォーマンスがいい ポータビリティー( 移 植 性 ) セキュリティ(バイトコード) 既 存 のフレームワークやライブラリ

JVM 言 語 ( 例 ) JVM 専 用 Scala Clojure Groovy Ceylon Fortress Gosu Kotlin JVMへポートされた JRuby Jython Smalltalk Ada Scheme REXX Prolog Pascal Common LISP

言 語 ランタイムとは Ruby Code Java Code Java Class Library JVM JRuby Runtime Java Class Library JVM OS OS 12

Java 以 外 の 言 語 をより 使 いやすくする 継 続 (continuations) 動 的 型 付 け 呼 び 出 し 末 尾 再 帰 インタフェース 注 入 その 他

Java 以 外 の 言 語 をより 使 いやすくする 継 続 (continuations) ネック: 動 的 型 付 け 呼 び 出 し 末 尾 再 帰 インタフェース 注 入 その 他

従 来 のメソッドの 呼 び 出 し 命 令 invokevirtual インスタンスメソッド invokeinterface インタフェースのメソッド invokestatic クラスメソッド invokespecial その 他 (コンストラクタ スーパークラス private など)

Java 言 語 に 適 切 他 の 言 語 にとっては 利 用 出 来 ない 場 合 がある

ディスパッチのエミュレーション JIT 最 適 化 が 出 来 ない 特 に インラインが 出 来 ない エミュレーション 自 体 のオーバーヘッドが 高 い

JSR-292 Java 以 外 の 言 語 の 呼 び 出 しロジックも 直 接 サポートする 問 題 : 言 語 によってディスパッチのロジックが 異 なります 解 決 : ディスパッチ ロジックを 固 定 しない

JSR-292 java.lang.invoke API ディスパッチ ロジックを 定 義 するため invokedynamic バイトコード 命 令 invoke API で 定 義 したロジックを 利 用 するディスパッチ

invokedynamic Indy (インディ)と 呼 ばれることが 多 い 最 初 は Java 言 語 で 利 用 される 予 定 はなかった java 言 語 に 該 当 するものはない 歴 史 的 初 めて 命 令 が 追 加 された 初 めて JVM を 他 の 言 語 のために 変 更 しました

java.lang.invoke API MethodHandle CallSite Bootstrap Method (BSM)

MethodHandle Method Handle int foo() 22

MethodHandle メソッドを 指 定 する 関 数 ポインタ ( 秘 密!) 多 相 シグネチャ

CallSite private void dostuff(); descriptor: ()V flags: ACC_PRIVATE Code: stack=2, locals=2, args_size=1 0: new #7 3: dup 4: invokespecial #8 7: astore_1 8: aload_1 9: aload_0 10: invokedynamic #9, 0 CS Method Handle int foo() 15: invokevirtual #10 18: return 24

CallSite private void dostuff(); descriptor: ()V flags: ACC_PRIVATE Code: stack=2, locals=2, args_size=1 0: new #7 3: dup 4: invokespecial #8 7: astore_1 8: aload_1 9: aload_0 10: invokedynamic #9, 0 15: invokevirtual #10 18: return CS int bar() int foo() 25

CallSite Indy の 呼 び 出 しを 具 象 化 する MethodHandle を 持 つ

Bootstrapping ステップ1 private void dostuff(); descriptor: ()V flags: ACC_PRIVATE Code: stack=2, locals=2, args_size=1 0: new #7 3: dup 4: invokespecial #8 7: astore_1 8: aload_1 9: aload_0 10: invokedynamic #9, 0 15: invokevirtual #10 18: return 27

Bootstrapping ステップ2 private void dostuff(); descriptor: ()V flags: ACC_PRIVATE Code: stack=2, locals=2, args_size=1 0: new #7 3: dup 4: invokespecial #8 7: astore_1 8: aload_1 9: aload_0 10: invokedynamic #9, 0 15: invokevirtual #10 18: return BootStrap Method 28

Bootstrapping ステップ3 private void dostuff(); descriptor: ()V flags: ACC_PRIVATE Code: stack=2, locals=2, args_size=1 0: new #7 3: dup 4: invokespecial #8 7: astore_1 8: aload_1 9: aload_0 int foo() 10: invokedynamic #9, 0 15: invokevirtual #10 18: return BootStrap Method 29

Bootstrapping ステップ4 private void dostuff(); descriptor: ()V flags: ACC_PRIVATE Code: stack=2, locals=2, args_size=1 0: new #7 3: dup 4: invokespecial #8 7: astore_1 8: aload_1 9: aload_0 int foo() 10: invokedynamic #9, 0 CS 15: invokevirtual #10 18: return BootStrap Method 30

Bootstrapping ステップ5 private void dostuff(); descriptor: ()V flags: ACC_PRIVATE Code: stack=2, locals=2, args_size=1 0: new #7 3: dup 4: invokespecial #8 7: astore_1 8: aload_1 9: aload_0 int foo() 10: invokedynamic #9, 0 CS 15: invokevirtual #10 18: return 31

Bootstrap Method indy 命 令 の 一 回 目 の 実 行 で 呼 ばれる CallSite を 返 す

Indy のライフサイクル 1 回 目 の 実 行 1. 特 定 の Indy 命 令 が 始 めて 実 行 される 2. bootstrap メソッドが 呼 ばれ 1の indy 命 令 に 該 当 するメソッドを 選 ぶ 3. bootstrap メソッドがこの indy 命 令 に 該 当 する CallSite を 生 成 し 戻 す 4. CallSite の MethodHandle が 指 定 するメソッドへジャンプ

Indy のライフサイクル 2 回 目 からの 実 行 CallSite の MethodHandle が 指 定 するメソッドへジャンプ

Invalidation 言 語 の runtime (JRuby, Groovy)がいつでも CallSiteのMethodHandle を 自 由 に 変 更 することが 出 来 る 例 : 引 数 のオブジェクトのタイプが 違 う タイプグラフが 変 更 された 既 にロードされたクラスのメソッドが 動 的 にリプレースされる

JSR-292 まとめ リンク 処 理 は 言 語 ランタイムに 任 せる 汎 用 的 なので 動 的 型 付 け 言 語 ではなくても 利 用 出 来 る CallSite を 変 更 しない 限 り 2 回 目 の 呼 び 出 しは 速 い

ラムダ 式 の 実 装 バイトコード レベル

ラムダ 式 の 型 新 しい 種 類 の 型 ( 関 数 型 )を 追 加 すると バイトコード 側 でどうやって 型 を 表 現 するか? 新 規 の 関 数 インスタンスをどうやって 生 成 する? variance ( 変 位 )をどうすべきか?

Variance ( 変 位 ) String instanceof Object == true String[] instanceof Object[] == true ArrayList<String> instanceof ArrayList<Object> == false 関 数 は? (String -> Boolean) instanceof (Object -> Boolean) ==?? 39

関 数 型 インタフェース 一 つの Abstract メソッドしか 持 たないインタフェース 別 名 Single Abstract Method (SAM) インタフェース 既 存 のライブラリをそのまま 利 用 出 来 る Java の 開 発 者 にとって 一 番 自 然 例 Runnable Comparator Executor ActionListener

関 数 型 インタフェースのインスタンスを 生 成 するには? 41

内 部 クラス Thread t = new Thread( ); () -> System.out.println("Hello Tokyo!")

内 部 クラス Thread t = new Thread( new Runnable() { public void run() { System.out.println("Hello Tokyo!"); } } );

内 部 クラスの 欠 点 ラムダ 式 ごとに 一 つのクラスが 生 成 される ラムダ 式 ごとに new が 呼 ばれる タイプ 汚 染

DEMO ( 内 部 クラス) public class Worker { public void dowork(runnable r) { r.run(); } } 45

他 の 選 択 肢 メソッドハンドル 多 相 シグネチャの 型 消 去 の 問 題 dynamic proxies か MethodHandleProxy パフォーマンスが 問 題 JVM の 内 部 API を 解 してクラスを 作 る Wrapper Class (インタフェース 毎 に 一 つの 実 装 クラス)

質 問 ラムダ 式 をどうやって バイトコードで 表 現 し 実 行 する? 47

実 は 2つの 質 問! どうやってバイトコードで 表 現 する? どうやって 実 行 する? 48

2つの 話 ラムダ 式 == 何 をやって 欲 しいか バイトコードの 表 現 を 固 定 する 必 要 がある 内 部 クラス MethodHandle など== どうやって 実 行 するか ベストの 答 えがない 実 装 を 固 定 したくはない

解 決 "All problems in computer science can be solved by another level of indirection コンピュータ 科 学 のいかなる 問 題 も 他 のレベルの インダイレクションによって 解 決 できる -David Wheeler 氏

解 決 バイトコードで 実 行 方 法 を 指 定 しないこと 実 行 は Runtime に 任 せることが 出 来 る Runtime によって 実 装 を 自 由 に 変 えることが 出 来 る javac より JVM のほうが 判 断 力 は 適 切

ラムダ 式 のレシピ メソッドの 本 体 (body)のバイトコード (ある 場 合 ) 生 成 する 関 数 型 インタフェース (Runnable など) 構 文 (lexical)スコープから 取 得 した 値 他 のメタデータ(serializable など)

ラムダ 式 のレシピ(メソッドの 本 体 ) String msg = "Hello Tokyo!" Thread t = new Thread( () -> System.out.println(msg) ); 53

ラムダ 式 のレシピ( 関 数 型 インタフェース) java.lang.runnable String msg = "Hello Tokyo!" Thread t = new Thread( () -> System.out.println(msg) ); 54

ラムダ 式 のレシピ ( 取 得 した 値 ) String msg = "Hello Tokyo!" Thread t = new Thread( () -> System.out.println(msg) ); 55

ラムダ 式 のレシピ 他 の(メタデータ) ( 今 回 は 特 に 無 し) String msg = "Hello Tokyo!" Thread t = new Thread( () -> System.out.println(msg) ); 56

レシピを JSR-292 で 表 現 出 来 る Indy の 呼 び 出 し 関 数 型 インタフェースのインスタンスを 戻 す Lambda Factory と 呼 ばれます MethodHandle / CallSite ラムダ 式 の 本 体 メソッドを 指 す Bootstrap method (BSM) 上 記 MethodHandle / CallSite を 戻 す Lambda Factory を 用 意 する(つくる) ので LambdaMetaFactory と 呼 ばれる

ラムダの 工 場 Indy の 呼 び 出 しはラムダ 式 を 作 るので lambda factory (ラムダ 工 場 )と 呼 ばれます

ラムダ 工 場 を 作 る 工 場 Lambda factory (invoke dynamic) に 該 当 する Callsite を 用 意 する bootstrap method は lambda meta-facotry と 呼 ばれます java.lang.invoke.lambdametafactory

ラムダ 式 の CallSite 動 的 型 付 けのタイプではない Bootstrap メソッドによって 生 成 されたら 変 わらない( 固 定 CallSite) 2 回 目 の 呼 び 出 しから 普 通 のコールと 同 じパフォーマンス

Demo (ラムダ 式 ) 61

ラムダ 式 の 実 装 Oracle Java SE 8 の 実 装 62

現 在 の Java SE の 実 装 内 部 クラスを 生 成 する ASM を 利 用 する 構 文 スコープの 値 を 取 得 しない 場 合 singleton を 利 用 する

裏 を 覗 いてみよう jdk/src/share/classes/java/lang/invoke/innerclasslambdametafactory.java 下 記 のシステムプロパティで 生 成 されたクラスをダンプすることが 出 来 る jdk.internal.lambda.dumpproxyclasses

まとめ バイトコードレベルでラムダ 式 のレシピだけがある 実 現 方 法 は Java のランタイムに 依 存 します パフォーマンス 現 在 の 実 装 >= 内 部 クラス

Thank You!

オマケ David Wheeler 氏 曰 く All problems in computer science can be solved by another level of indirection, except of course for the problem of too many indirections. コンピュータ 科 学 のいかなる 問 題 も 他 のレベルのインダイレクショ ンによって 解 決 できる ただし あまりに 間 接 参 照 のレイヤーが 重 なり 過 ぎるという 問 題 だけは 解 決 できない Compatibility means deliberately repeating other people's mistakes. 互 換 性 は 他 の 人 々の 間 違 いを 意 図 的 に 繰 り 返 すことを 意 味 する

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. 68

69