SlideShare uma empresa Scribd logo
1 de 63
Baixar para ler offline
NetBeansのメモリ使用ログから
機械学習で
きしだが働いてるかどうか判定する
2017/5/20 LINE Fukuoka きしだ なおき
Java8 コーディング
ベストプラクティス
&
自己紹介
●
きしだ なおき
●
LINE FukuokaでJavaを書いてます
今日のはなし
●
Java8コーディングベストプラクティス
●
NetBeansのメモリログから、機械学習で
きしだが働いてるかどうか判定する
ところで、なぜ2本立て?
●
Call for Papersに2本出した
– Java8コーディング〜(30分)
– NetBeansのメモリログから〜(50分)
ところで、なぜ2本立て?
●
両方とおった
– お、おう
ところで、なぜ2本立て?
●
やっぱり1枠で。50分で
– でもJava8のほうが人気タカカッタヨ
ところで、なぜ2本立て?
●
あ、45分で
– Java8中心にやろう
– 先にNetBeansのメモリログから〜をやります
NetBeansのメモリログから
機械学習で
きしだが働いてるかどうか
判定する
メモリログ
●
ヒープの使用量
あそんでる あそんでるなんかしてる
どう取るか
●
JMXという仕組みがある
●
InfluxDBにつっこむ
●
Grafanaで見る
構成
なんかプログラム
JMX
https://github.com/kishida/analyzenb/blob/master/src/main/java/kis/analyzenb/JmxInflux.java
問題
●
Javaのメモリ使用グラフは、GCがあるので波形データに
なる
– 単純な閾値では判定できない
●
時系列データの判定は単純な機械学習では難しい
周波数解析する
●
時間ごとの周波数解析を行う
●
フーリエ変換
– データ全体の周波数解析を行う
– 三角関数で畳み込む
●
窓関数付きフーリエ変換
– 時間ごとにデータを切り出して
フーリエ変換を行う
●
ウェーブレット変換
– 短く切り出した三角関数などを使って
畳み込む
– 処理も簡単
http://d.hatena.ne.jp/nowokay/20161227
※畳み込み
zip(data1, data2)
.map((a, b) -> a * b)
.sum()
離散ウェーブレット変換
●
隣同士を引いて2で割る
– 移動差分
– ハイパスフィルタになる(高い周波数だけ残す)
– ウェーブレット値
●
隣同士を足して2で割る
– 移動平均
– ローパスフィルタになる(低い周波数だけ残す)
– より低い周波数の解析に使う
ウェーブレット変換でできること
●
情報圧縮
– JPEG2000で使われている
●
電子すかし(ステガノグラフィ)
– 人間にはわからないように情報を画像などに埋め込む
上位1/4の周波数成分だけ残してウェーブレット逆変換
http://d.hatena.ne.jp/nowokay/20161229
ウェーブレット変換の適用
●
512データ(8分30秒)をウェーブレット変換
する
●
512 = 2^9
– 9+1=10周波数のデータができる
機械学習
●
ディープじゃないラーニング
●
3層のニューラルネットワーク
●
各時間ごとに10個のデータ
●
出力は1つ
●
10 -> 5 -> 1
https://github.com/kishida/analyzenb/blob/master/src/main/java/kis/analyzenb/BackPropergation.java
教師データはどうする?
●
機械学習では、学習用に、入力値とその入力が
どう判定されるべきかという教師データが必要
Thread count
●
NetBeansが使っているスレッド数
●
NetBeansを触ってないときはスレッド数が32
●
教師データに使える
機械学習とか不要では?
●
ロマンです
結果
●
なんとなく判定できている
https://github.com/kishida/analyzenb/blob/master/src/main/java/kis/analyzenb/UsageData.java
他の手法
●
ニューラルネットではなくSVMで識別する
●
RNN(循環ニューラルネットワーク)を使う
– 学習がうまくいけばウェーブレット変換と
同じ計算になりうる
●
近傍法など障害検知手法を使う
– 多値分類はできない
– 学習が不要
まとめ
●
時系列データのウェーブレット変換からなんと
なく状態を把握することができた
●
常に働いていれば判定など不要
Java8コーディング
ベストプラクティス
話すこと
●
Java8でのコーディングで気をつけることを
まとめる
●
APIの使い方自体はちゃんと把握しておく
Agenda
●
一般的なこと
●
Java 8
●
Java 7以前
一般的なこと
●
Immutability
●
論理式をうまく使う
●
大事なものはインデントを浅く
●
オーバーロード
Immutability
●
変数への再代入を避ける
●
ImmutableList/Mapを使う
変数への再代入を避ける
String message = "default";
if (hoge) {
message = "ほげ";
}
String message;
if (hoge) {
message = "ほげ";
} else {
message = "default";
}
変数への再代入を避ける
String message;
if (hoge) {
message = "ほげ";
} else {
message = "default";
}
●
再代入がないほうが最適化がかかりやすい
●
代入を忘れた場合にコンパイルエラーになる
ImmutableList/Mapを使う
●
Guavaのライブラリ
●
Collectors::toListの代わりに
ImmutableList::toImmutableList
●
ofが便利
– Java 9が待てない人のために
toImmutableList
strs.stream()
.map(String::toUpperCase)
.collect(ImmutableList.toImmutableList());
●
値が変更されないことを明示する
●
並列実行で不具合が起きない
ofが便利
●
固定値のListやMapを作る場合
●
Java 9ではList.of/Map.ofが入る
Map<String, String> countries = ImmutableMap.of(
"JP", "日本",
"US", "アメリカ");
論理式をうまく使う
●
ド・モルガンの法則を活用する
●
片方が定数リテラルを返す条件演算子は
論理演算にできる
●
ifでbooleanを反転させない
ド・モルガンの法則を使う
if (!(str != null && !str.isEmpty()))
{
...
}
if (str == null || str.isEmpty()) {
...
}
リテラルを返す式を論理演算に
● 片方がbooleanリテラルの条件式は論理演算に
boolean f = str == null ? true : str.isEmpty();
boolean f = str == null || str.isEmpty();
大事なものはインデントを浅く
●
早期リターン
if (hoge) {
Foo foo = bar.getSomething();
return foo.getImportantValue();
}
return null;
if (!hoge) {
return null;
}
Foo foo = bar.getSomething();
return foo.getImportantValue();
ifでbooleanを反転させない
●
booleanリテラルを返すとき、条件が
なりたったときにはtrue、elseでは
falseを返すようにする。
if (hoge) {
someProc();
return false;
} else {
anotherProc();
return true;
}
if (!hoge) {
anotherProc();
return true;
} else {
someProc();
return false;
}
オーバーロード
●
引数省略のために使う
●
処理を集約させる
●
引数が多いものを前に
void foo(int count, String message) {
IntStream.range(0, count)
.mapToObj(i -> i + ":" + message)
.forEach(System.out::println);
}
void foo(String message) {
foo(1, message);
}
void foo() {
foo(null);
}
処理が違うならメソッド名を変える
List<Product> find(Author a);
List<Product> find(Category c);
List<Product> findByAuthor(Author a);
List<Product> findByCategory(Category c);
Java 8
●
Stream
●
Optional
●
FunctionalInterface
●
ラムダ
●
Date and Time
Stream
●
forEachのifをfilterにできる
●
forEachでの値変換はmapにできる
●
forEachの入れ子はflatMapにできる
●
count() > 0は使わない
forEachのifをfilterにできる
strs.forEach(s -> {
if (s.length() >= 5) {
return;
}
String upper = s.toUpperCase();
Stream.of(upper.split(","))
.forEach(Syastem.out::println);
});
strs.stream()
.filter(s -> s.length() < 5)
.forEach(s -> {
String upper = s.toUpperCase();
Stream.of(upper.split(","))
.forEach(System.out::println);
});
forEachでの値変換はmapにできる
strs.stream()
.filter(s -> s.length() < 5)
.forEach(s -> {
String upper = s.toUpperCase();
Stream.of(upper.split(","))
.forEach(System.out::println);
});
strs.stream()
.filter(s -> s.length() < 5)
.map(s -> s.toUpperCase())
.forEach(upper -> {
Stream.of(upper.split(","))
.forEach(System.out::println);
});
forEachの入れ子はflatMapにできる
strs.stream()
.filter(s -> s.length() < 5)
.map(s -> s.toUpperCase())
.forEach(upper -> {
Stream.of(upper.split(","))
.forEach(System.out::println);
});
strs.stream()
.filter(s -> s.length() < 5)
.map(s -> s.toUpperCase())
.flatMap(upper -> Stream.of(upper.split(",")))
.forEach(System.out::println);
同じオブジェクトには同じ変数
strs.stream()
.filter(s -> s.length() < 5)
.map(s -> s.toUpperCase())
.flatMap(upper -> Stream.of(upper.split(",")))
.forEach(System.out::println);
strs.stream()
.filter(a -> a.length() < 5)
.map(b -> b.toUpperCase())
.flatMap(upper -> Stream.of(upper.split(",")))
.forEach(System.out::println);
Streamで書くメリット
●
行われる操作が限定される
●
変数の行く先を追わなくてよい
●
結果、読みやすくなる
strs.stream()
.filter(s -> s.length() < 5)
.map(s -> s.toUpperCase())
.flatMap(upper -> Stream.of(upper.split(",")))
.forEach(System.out::println);
count() > 0は使わない
strs.stream().filter(s -> s.length() > 5).count() > 0
strs.stream().anyMatch(s -> s.length() > 5)
例外処理はあきらめる
●
例外と関数型プログラミングは相性が悪い
●
あきらめてtry〜catchを書く
●
streamをあきらめてfor文を使う
Optional
●
ifPresentのifをfilterにできる
●
ifPresentでの値変換はmapにできる
●
ifPresentの入れ子はflatMapにできる
●
引数には使わない
●
orElseThrowにException::newを書かない
ifPresentのifをfilterに
strOpt.ifPresent(s -> {
if (s.length() >= 5) {
return;
}
String upper = s.toUpperCase();
findSome(upper) // return Optional
.ifPresent(Syastem.out::println);
});
strOpt.filter(s -> s.length() >= 5)
.ifPresent(s -> {
String upper = s.toUpperCase();
findSome(upper) // return Optional
.ifPresent(System.out::println);
});
ifPresentでの値変換をmapに
strOpt.filter(s -> s.length() >= 5)
.ifPresent(s -> {
String upper = s.toUpperCase();
findSome(upper) // return Optional
.ifPresent(System.out::println);
});
strOpt.filter(s -> s.length() >= 5)
.map(s -> s.toUpperCase())
.ifPresent(upper -> {
findSome(upper) // return Optional
.ifPresent(System.out::println);
});
ifPresentの入れ子をflatMapに
strOpt.filter(s -> s.length() >= 5)
.map(s -> s.toUpperCase())
.ifPresent(upper -> {
findSome(upper) // return Optional
.ifPresent(System.out::println);
});
strOpt.filter(s -> s.length() >= 5)
.map(s -> s.toUpperCase())
.flatMap(upper -> findSome(upper))
.ifPresent(System.out::println);
どこかで見た。
●
Optional.ifPresentはStream.forEachと同じ
– Optionalを要素1つまでのStreamと考える
引数にOptionalを使わない
●
メソッド定義者がnullに対応する
●
フレームワークの入り口は除く
OrElseThrowにException::newを
渡さない
●
なにかのキーから値を取得しようと思って失敗
している。
●
例外の原因を究明するためにはキーの値が必要
●
例外メッセージにキーの値を含める必要がある
FunctionalInterface
●
実装したクラスを作らない
●
ラムダを割り当てた変数を作らない
String twice(String s) {
return s + s;
}
strs.stream()
.map(Util::twice)
.forEach(System.out::println);
Function<String, String> twice = s -> s + s;
strs.stream()
.map(twice)
.forEach(System.out::println);
ラムダ
●
むやみにAtomicInteger/Longを使わない
AtomicInteger count = new AtomicInteger(0);
strs.stream()
.filter(s -> s.length() < 5)
.forEach(s -> count.incrementAndGet());
int[] count = {0};
strs.stream()
.filter(s -> s.length() < 5)
.forEach(s -> ++count[0]);
Date and Time
●
自分で時間を計算しない
long TIME_OUT_MILLIS = 3 * 60 * 60 * 1000;
long TIME_OUT_MILLIS = Duration.ofHours(3).toMillis();
Java7以前
●
LinkedListは使わない
●
IOExeptionをRuntimeExceptionでラップ
しない
LinkedListは使わない
●
ほとんどの場合、ArrayListのほうが速い
●
LinkedList.remove/insertの実装がひどい
– 値をたどってから操作を行う
– 途中への値挿入・削除が効率いいという連結リスト
のメリットを持っていない
IOExceptionを
RuntimeExceptionでラップしない
●
UncheckedIOExceptionを使う
try {
readFile();
} catch (IOException ex) {
throw new RuntimeException();
}
try {
readFile();
} catch (IOException ex) {
throw new UncheckedIOException();
}
まとめ
●
細かいことを積み重ねるとケアレスミスが減っ
ていきます。
●
1ヶ月くらいで慣れて自然にバグが減ります(個
人の感想です)

Mais conteúdo relacionado

Mais procurados

ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 

Mais procurados (20)

Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にReactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルJava SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfileJava EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
 

Destaque

JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Koichi Sakata
 

Destaque (20)

Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門
 
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug 日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project Jigsaw
 
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 

Semelhante a Java8 コーディングベストプラクティス and NetBeansのメモリログから...

第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
chonaso
 
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
Computational Materials Science Initiative
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
Shintaro Fukushima
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
mitamex4u
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
Jiro Nishiguchi
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
Hisateru Tanaka
 

Semelhante a Java8 コーディングベストプラクティス and NetBeansのメモリログから... (20)

60分で体験する Stream / Lambda
 ハンズオン
60分で体験する Stream / Lambda
 ハンズオン60分で体験する Stream / Lambda
 ハンズオン
60分で体験する Stream / Lambda
 ハンズオン
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
 
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
 
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
CMSI計算科学技術特論A(7) 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 
pi-6. 繰り返し
pi-6. 繰り返しpi-6. 繰り返し
pi-6. 繰り返し
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
Introduction pp.js
Introduction pp.jsIntroduction pp.js
Introduction pp.js
 
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析
 

Mais de なおき きしだ

GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
なおき きしだ
 
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
なおき きしだ
 

Mais de なおき きしだ (20)

GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
 
GraalVM at Fukuoka LT
GraalVM at Fukuoka LTGraalVM at Fukuoka LT
GraalVM at Fukuoka LT
 
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
 
GraalVMについて
GraalVMについてGraalVMについて
GraalVMについて
 
VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話
 
最近の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 大阪
 
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定するNetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
 
JavaOne2016報告
JavaOne2016報告JavaOne2016報告
JavaOne2016報告
 

Java8 コーディングベストプラクティス and NetBeansのメモリログから...