新世代Javaプログラミングガイド Java SE 10/11/12/13と言語拡張プロジェクト


新世代Javaプログラミングガイド[Java SE 10/11/12/13と言語拡張プロジェクト] impress top gearシリーズ


インプレス


著者:Mala Gupta、柴田芳樹


訳者まえがき
まえがき

第1部 Java 10
第1章 ローカル変数での型推論
1.1 型推論とは
1.2 varによる型推論
1.2.1 必須の非null初期化
1.2.2 ローカル変数
1.2.3 コードチェック—第1問
1.2.4 基本データ型におけるvarの使用
1.2.5 派生クラスでの型推論
1.2.6 インタフェースでの型推論
1.2.7 配列でのvarの使用
1.2.8 ジェネリックスでの型推論
1.2.9 コードチェック-第2問
1.2.10 推論された変数をメソッドへ渡す
1.2.11 推論された変数へ値を再代入する
1.2.12 推論される変数での明示的なキャスト
1.2.13 明示的なキャストでnullを代入する
1.3 Java9までの型推論
1.3.1 Java5での型推論
1.3.2 Java7での型推論
1.3.3 Java8での型推論
1.4 課題
1.4.1 想定が成り立たないスコープを限定的にする
1.4.2 既存コードとの非互換
1.4.3 非表示型
1.4.4 意味のある変数名
1.4.5 コードのリファクタリング
1.5 型推論と動的バインディング
1.6 まとめ

第2章 AppCDS―アプリケーション・クラスデータ共有
2.1 技術的な要件
2.2 CDSとは
2.2.1 共有アーカイブファイルの場所
2.2.2 classes.jsaの手作業による作成
2.2.3 CDSの使い方
2.3 AppCDS
2.3.1 AppCDSの恩恵
2.3.2 アプリケーション・クラスデータ共有を有効にする
2.3.3 アーカイブすべきアプリケーションのクラス
2.3.4 アプリケーション共有アーカイブファイルの作成
2.3.5 アプリケーション共有アーカイブファイルを使う
2.4 まとめ

第3章 ガベージコレクタの最適化
3.1 技術的な要件
3.2 GCインタフェース
3.2.1 恩恵
3.2.2 推進要因
3.2.3 影響
3.3 G1用の並列フルGC(JEP 307)
3.3.1 G1GCの設計目標
3.3.2 G1メモリ
3.3.3 コード例
3.3.4 G1GCのログを理解する
3.4 まとめ

第4章 JDK 10のその他の改良点
4.1 技術的な要件
4.2 JDK10の機能と、対応するJEP番号/範囲
4.2.1 JDKのソースを単一リポジトリへ統合
4.2.2 スレッドローカル・ハンドシェイク
4.2.3 ネイティブヘッダー生成ツール(javah)の削除
4.2.4 追加のUnicode言語タグ拡張
4.2.5 代替メモリデバイスでのヒープ割り当て
4.2.6 Javaで書かれた実験的なJITコンパイラ
4.2.7 ルート証明書
4.2.8 時間に基づくリリースのバージョン付け
4.3 まとめ

第2部 Java 11
第5章 ラムダパラメータのローカル変数構文
5.1 技術的な要件
5.2 ラムダ式
5.2.1 明示的に型付けされたラムダ式
5.2.2 暗黙的に型付けされたラムダ式
5.3 ラムダパラメータとvarでの型推論
5.3.1 ラムダパラメータへのvarの追加
5.3.2 ラムダパラメータにアノテーションを付加する
5.4 まとめ

第6章 Epsilon GC―ガベージコレクタの改良
6.1 技術的な要件
6.2 EpsilonGCの背後にある動機
6.2.1 EpsilonGCの機能
6.3 HelloEpsilonGCクラス
6.3.1 スタックあるいはヒープのどちらのメモリ領域をGCは回収するのか
6.4 EpsilonGCによるメモリプレッシャーテスト
6.5 ガベージなしアプリケーションを設計する
6.5.1 VMインタフェースのテスト
6.6 まとめ

第7章 HTTPクライアントAPI
7.1 技術的な要件
7.2 はやめぐり
7.2.1 HTTPでできること
7.2.2 基本的なコード例
7.2.3 HttpClientクラス
7.3 コード例
7.3.1 同期的なGETを使ってHTMLページへアクセスする
7.4 非同期なGETを使ってHTMLページへアクセスする
7.4.1 複数の画像ファイルをダウンロードする
7.4.2 フォームの詳細をポストする
7.5 まとめ

第8章 ZGC―低遅延化とスケーラビリティの改善
8.1 技術的な要件
8.2 動機
8.2.1 ZGCの機能
8.2.2 ZGCを使う
8.3 ZGCのヒープ
8.4 ZGCのフェーズ
8.5 色付けされたポインタ
8.6 ZGCのチューニング
8.7 まとめ

第9章 フライトレコーダとミッションコントロール
9.1 技術的な要件
9.2 JFRの背景にある動機
9.2.1 機能
9.2.2 モジュール
9.3 JFRを使う
9.3.1 さらに調査を進める
9.4 カスタムイベントに取り組む
9.5 まとめ

第10章 JDK 11のその他の改良点
10.1 技術的な要件
10.2 JDK11の機能と、対応するJEP番号/範囲
10.3 ネストに基づくアクセス制御
10.3.1 ネストに基づくアクセスとは
10.3.2 ネストに基づくアクセス制御の影響
10.4 動的クラスファイル定数
10.5 AArch64イントリンシックの改善
10.6 JavaEEとCORBAモジュールの削除
10.7 Curve25519とCurve448での鍵合意
10.8 Unicode10
10.9 ChaCha20とPoly1305の暗号アルゴリズム
10.10 単一ファイルソースコードのプログラム起動
10.11 TLS1.3
10.12 NashornJavaScriptエンジンの廃止
10.13 pack200ツールとAPIの廃止
10.14 まとめ

第3部 Java 12
第11章 switch式
11.1 技術的な要件
11.2 従来のswitch文の問題
11.3 switch式を使う
11.4 switchの条件分岐内でローカル変数を定義する
11.5 switch式の別の構文
11.6 プレビュー言語機能
11.7 網羅的なcase
11.8 値を返す以外にswitchの条件分岐ができること
11.9 switch式でラベルとcontinueを使えないケース
11.10 まとめ

第12章 JDK 12のその他の改良点
12.1 技術的な要件
12.2 JDK12の機能と、対応するJEP番号/範囲
12.3 ShenandoahGC:一時停止時間が短いGC
12.4 マイクロベンチマーク・スイート
12.5 JVM定数API
12.6 AArch64版の一本化
12.7 CDSアーカイブをデフォルト
12.7.1 CDSとは
12.7.2 CDSの拡張
12.8 G1用の中止可能な混在コレクション
12.9 未使用のコミットメモリのG1からの迅速な返却
12.10 まとめ

第4部 Java言語拡張プロジェクト「Amber」
第13章 Amberプロジェクトの拡張enum型
13.1 enumの背景
13.1.1 コード例
13.1.2 enumの仕組み
13.2 enum定数の状態と振る舞い
13.2.1 enum定数への状態と振る舞いの追加
13.2.2 enum定数の状態と振る舞いへアクセスする
13.2.3 enum定数で継承を使う
13.2.4 enumへジェネリックスを追加する
13.2.5 enum定数の型付けの洗練
13.3 まとめ

第14章 データクラスとその利用方法
14.1 データクラスの紹介
14.1.1 データクラスとは
14.1.2 Java言語にデータクラスを追加する必要性
14.2 データクラス
14.2.1 構文と意味の例
14.2.2 制限
14.2.3 過去の例—enumを定義するための変更
14.2.4 状態のカプセル化
14.2.5 インタフェースを実装する
14.2.6 暗黙的な振る舞いをオーバーライドする
14.2.7 追加のメソッドとコンストラクタ
14.2.8 不変性
14.3 まとめ

第15章 テキストブロック
15.1 技術的な要件
15.2
15.3 既存の複数行の文字列リテラルでの問題
15.3.1 単純な作業
15.3.2 従来の文字列リテラルでのエスケープシーケンス地獄
15.3.3 従来の文字列リテラルでの結合地獄
15.3.4 文字列リテラルの一部にエスケープシーケンスを含める
15.4 テキストブロック
15.4.1 テキストブロックを使って書き直す
15.4.2 デリミタ(“"")
15.4.3 テキストブロックと従来の文字列リテラル
15.5 よくある例
15.5.1 JSONデータ
15.5.2 XMLデータ
15.5.3 データベースクエリ
15.6 まとめ

第16章 ラムダの改善ポイント
16.1 技術的な要件
16.2 使われないパラメータをアンダースコアで明示する
16.2.1 ラムダパラメータの例
16.2.2 ここまでの過程
16.3 ラムダパラメータのシャドーイング
16.3.1 ラムダパラメータの既存のケース
16.3.2 ラムダパラメータが外側の変数をシャドーイングすべき理由
16.3.3 既知の問題
16.4 関数式の曖昧性の除去
16.4.1 オーバーロードされたメソッドの解決の問題-ラムダを渡す
16.4.2 オーバーロードされたメソッドの解決の問題-メソッド参照を渡す
16.4.3 提案されている解決方法
16.5 まとめ

第17章 パターンマッチング
17.1 技術的な要件
17.2 パターンマッチング
17.3 型検査での既存の問題
17.4 型検査パターン
17.5 switch構文でのパターンマッチング
17.6 まとめ

付録A Amberプロジェクト用のJDKのビルド手順

索引

書籍目次

Posted by shi-n