SlideShare a Scribd company logo
1 of 44
Download to read offline
2014/11/15 きしだなおき
ニュータイプ
ニュータイプ
● ニュー→新しい
● タイプ→型
新しい型!
Javaの今までの型
● 基本型
– 8つの基本的な型
● 参照型
– オブジェクト
●
異なる型の値をまとめる
– 配列
● 同じ型の値をまとめる
今までの型の欠点
● 基本型
– さまざまなアーキテクチャにあわせれない
● 参照型
– オブジェクト
● 参照とヘッダがオーバーヘッド
● メモリが散乱する
– 配列
● 多次元配列がない(現在は1次元配列の多重化)
● 大きい配列が定義できない(32億要素まで)
つまり
● 新しいプロセッサに適応できない
● 新しいメモリモデルに適応できない
現在のコンピュータアーキテクチャ
メモリのアクセス速度
種類 時間
クロック 1秒
レジスタ 1秒
コア内キャッシュ 3秒
共通キャッシュ 43秒
メインメモリ 6分
● 1クロックを1秒とすると
いかにキャッシュに乗せるか
● いかにメモリをまとめて扱うか
Pointクラス
class Point{
final int x;
final int y;
}
Pointクラスの配列
Pointクラスの配列の効率化
ValueType版Point
value class Point{
final int x;
final int y;
}
ValueType版Pointの配列
次世代Javaのためのプロジェクト
● Project Valhalla
– Specialization
– Value Types
– ClassDynamic
● Project Panama
– Foreign Function Interface
– Object Layout
– Arrays 2.0
Project Panama
● FFI/JNR
– ネイティブ呼び出し
● Object Layout
– オブジェクトの配置
● Arrays 2.0
– 配列の拡張
FFI(Foreign Funciton Interface)
● ネイティブライブラリの呼び出し
● JNR(Java Native Runtime)
FFI/JNR
Arrays2.0
● 多次元配列
– 現状は、配列の配列
– ヒープの中に散らばる
●
インデックス
– intより大きい値
● アクセス制限
– リードオンリー、一度だけ書き込み、並列更新
Project Valhalla
● Value Types
– ユーザー定義基本型
● Specialization
– 基本型が指定可能なGenerics
● Class Dynamic
– クラスの動的リンク
ValueTypesとSpecialization
● ValueTypes
– VM優先
– enhancements to the Java Virtual Machine
instruction set, and secondarily to the Java
Language
http://cr.openjdk.java.net/~jrose/values/values-0.html
● Specialization
– 言語優先
– enhancements to the Java Language (and
secondarily, to the Java Virtual Machine)
http://cr.openjdk.java.net/~briangoetz/valhalla/specialization.html
ValueTypes
● Codes like a class, works like an int!
● ローカルキーワードが導入される?
– valueをキーワードにできない
– classの前にだけ使えるキーワード
value class Point{
final int x;
final int y;
}
ValueTypesの利用
static Point origin = __MakeValue(0, 0);
static String stringValueOf(Point p) {
return "Point("+p.x+","+p.y+")";
}
static Point displace(Point p, int dx, int
dy) {
if (dx == 0 && dy == 0)
return p;
Point p2 = __MakeValue(p.x + dx, p.y +
dy);
assert(!p.equals(p2));
return p2;
}
● __MakeValueはなんらかのおしゃれな表記にな
るはず
ValueTypesの応用
● 数値
– 複素数、Unsigned、Decimal
● ネイティブ対応
– 128bit整数
● 代数データ
– Optional<T>、Choice<T,U>
● タプル
– 複数戻り値
ValueTypesの制約
● ロックに使えない
● 参照での比較
● cloneできない
– 意味がない
● Java 8でも似たような定義
– Value-based Classes
https://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html
● あんまり大きくない型
検討事項
● null
● キャスト
● リフレクション
● アトミック性
– volatileの拡張
● 互換性
– Optional<T>をそのままValueTypeにできるか
Specialization
ArrayList<int>
Java8の美しくないクラス
● StreamとIntStream
● OptionalとOptionalInt
ValueType対応
● それぞれのValueTypeにあわせたコレクションを
作るのは無理
Genericなクラス
class Box<T>{
T value;
Box(T v){
value = v;
}
T getValue(){
return T;
}
}
現在のコンパイル結果
class Box{
Object value;
Box(Object v){
value = v;
}
Object getValue(){
return value;
}
}
Specialize対応のコンパイル結果
class Box{
Object*T value;
Box(Object*T v){
value = v;
}
Object*T getValue(){
return value;
}
}
Box<int>の場合
class Box{t=int}{
int value;
Box(int v){
value = v;
}
int getValue(){
return value;
}
}
つまり
Box<int> box = new Box<int>();
というのは
Box{t=int} box = new Box{t=int}();
キャストの制約
● Specializeされたクラスはキャスト不可
Box box = new Box<int>();
List nums = new List<int>();
基本型と参照型の非互換の問題
● 基本型と参照型で同じコードが使えない。
– 比較など
条件付きメソッド
class Box<T>{
T value;
<where T=int> int getTwice(){
return value * 2;
}
}
問題点
● null
● オーバーロード
List<T>{
void remove(T o);
void remove(int idx);
}
Specializeされたクラスをいつ作るか
ClassDynamic
● 動的なクラスリンク
● InvokeDynamicのクラス版
応用
● プロキシ
● タプル
– ScalaのTuple22問題
いつになるの?
● Project Panama
– Java 9?
– JavaOneでCharles NutterがJNRだけは入れたい、と
言ってた
● Project Valhalla
– Java 10?
● VMだけ変わって言語に反映されない可能性も
● .netと激しく競合するようになった今、できれば早
いほうがいいな
– Value Types、Specializationは.netそのまま
まとめ
Cool Java!

More Related Content

More from なおき きしだ

New thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should knowNew thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should know
なおき きしだ
 

More from なおき きしだ (20)

最近のJava事情
最近のJava事情最近のJava事情
最近のJava事情
 
怖いコードの話 2018/7/18
怖いコードの話 2018/7/18怖いコードの話 2018/7/18
怖いコードの話 2018/7/18
 
Java新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナーJava新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナー
 
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
 
これからのコンピューティングの変化とこれからのプログラミング at 広島
これからのコンピューティングの変化とこれからのプログラミング at 広島これからのコンピューティングの変化とこれからのプログラミング at 広島
これからのコンピューティングの変化とこれからのプログラミング at 広島
 
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
 
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
 
Java10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 SprJava10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 Spr
 
New thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should knowNew thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should know
 
Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)
 
これからのJava言語と実行環境
これからのJava言語と実行環境これからのJava言語と実行環境
これからのJava言語と実行環境
 
JavaOne報告2017
JavaOne報告2017JavaOne報告2017
JavaOne報告2017
 
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
 
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定するNetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
 
JavaOne2016報告
JavaOne2016報告JavaOne2016報告
JavaOne2016報告
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
 
Javaプログラミング入門
Javaプログラミング入門Javaプログラミング入門
Javaプログラミング入門
 
人工知能に何ができないか
人工知能に何ができないか人工知能に何ができないか
人工知能に何ができないか
 
乱数のたのしい話
乱数のたのしい話乱数のたのしい話
乱数のたのしい話
 

JJUG CCC 2014 fall Javaが見るニュータイプの夢