JJUG CCC 2018 SPRING

| コメント(0) | トラックバック(0)

http://www.java-users.jp/ccc2018spring/#/
行ってみました。プログラミングに関するイベントには初参加。

jjug_ccc_2018_spring.jpg

■Javaはコミュニティの力で再び偉大になれるのか(JJUG基調講演) #ccc_e1
資料:https://www.slideshare.net/yusuke/java-98886920
・ライセンスの話(コピーレフト、準コピーレフト、非コピーレフト)
・Java EE Gurdians → 後のJakaruta EE
 仕様の策定プロセスもOracleから移管
・Eclipse MicroProfile → マイクロサービスを意識したEEの仕様
 マイクロサービスはSpring Boot v.s. MicroProfile という構図になりつつあるので
 マイクロサービスに興味がある人は Micro Profileの話題をキャッチアップしたほうが良さそう。

・リリースモデルの変更
 2018/09 Java11 (ここでOraclejdkとOpenJDKが同一になる。)LTS
 その次のLTS → Java17
 Java11リリースまではJava8はサポートされる。
 今後はマイクロサービス、コンテナ対応が主。今のJavaの問題はフットプリント、起動時の重さが問題。Dockerや仮想環境のことを考慮すると、マイクロ秒での立ち上げが要求される。昔Javaが重いと批評されていた時期があるが、それと似たような感じにまたなっている。でもこれは解消される方向に向かうだろうとのこと。

・Javaのカルチャー:コミュニティーがJavaを支えている。誰でも関係者になれる。
(最終的にはSunやOracle決めているイメージがあったが認識を改める。)

-----
■Kotlin + Spring Bootでサーバー開発 #ccc_a2
資料:https://www.slideshare.net/KiyotakaSoranaka/kotlin-spring-boot/KiyotakaSoranaka/kotlin-spring-boot

 Kotlin(コトリン:読み方初めて知った。)
 読み方がわかるというのもイベントの良さだと思う。

・Kotlin→null安全な静的型付け言語。JVM上で動く。
 Spring BootもKotlinに対応している
 
 Kotolinのコードはすごくtypescriptっぽい見える。クライアントサイドをTypeScript、サーバサイドKotlinにするとすごい似た感じで整えられそうだ。

・Kotlinのメリット:
 ・短く書ける。val→finalな変数扱い
 ・コレクションのイテレート方法がλ記法。for loop書かないのが基本っぽい。
 ・Springのアノテーションがわかりやすくなっている。→名前付き引数。これが間違いっていると警告が出るようになっている。
 ・名前付き引数:f(a=..., b=..., ,c=...)
   例えばbとc型が同じでも、渡す順序
   メソッド定義と逆ならばコンパイル時点で気づくことができる。

・Kotlin書くならIntelliJ IDEAが良い→Kotlinっぽい書き方をアドバイスしてくれる。
 注意点:JUnitのテストケースは@Autowired必要。(テスト元は必要ないけど)

色々聞いて思ったこと:Kotlin特有のパフォーマンスの問題ってないんだろうか。
→答えてくださっていた。
 https://twitter.com/soranakk/status/1000260233439014912
 https://twitter.com/soranakk/status/1000289064698896384

-----
■ざっくりわかった気になるモダンGC入門 #ccc_a3
資料:https://speakerdeck.com/yokotaso/introduction-to-modern-gc
個人的に今回のJJUGで一番聞きたかったセッション。

従来:
パラレルGC→CMSGC→G1GC(java9から標準)
GCのコンパクションフェーズでは停止時間が発生する。
でもコンパクションしないと空きメモリがフラグメント化する。

マシンの性能向上により、巨大ヒープを扱うアプリが増えてきた。
→ヒープ領域が増えると従来のGCではメモリ領域に比例して停止時間が増える
 →これをなんとかしたい。

・Shenadoah(シェナンドオァ)GC 20GB、100GBヒープでの停止時間が同じ。
G1GCと同じようにリージョン管理(世代別GCでは無い)
G1GCと違って並列コンパクションができるようになっている。

並列コンパクション
→アプリケーション動作中に並行してヒープ上のポインタが差し代わる。(実装難しい。)

       [Pointer]←┐
[Pointer]→[Header ]─┘
[    ] [   ]
Pointer(Brook Pointerと呼ぶ)が自分自身を指しているかどうかで
退避中かどうかを判断している。(コンパクションしているけど、
アプリケーションを止めずに動かせる!)

・ZGC→Oracleが作成。数TBのヒープ領域でも停止時間が単調増加しないGC。
 Linux64bit環境のみサポート。以下の3機能を駆使
  ①カラーポインタ
  ②仮想メモリ(Linux64bit環境でないと使えない。)
  ③フォワーディングテーブル

ZGCを使うにはOSは128TBのメモリが必要!→これを実現するために②仮想メモリ機能を活用している。ShenadoahGCと違ってオブジェクト毎のヘッダーが不要なので、メモリ使用効率が高い。
今後、Linux 64bit環境ならZGC、その他はShenadoahGCに変わっていくようだ。
--
(おまけ?)EpsilonGC
・アプリケーションの停止はしない。CPU負荷がない。GCにかかる時間は無い
→夢のGC?実態は「何もしないGC」
 ・ヒープが埋まるとOOM発生。本番環境では使ってはいけない。
 →何のためにあるの?
  →JVMパフォーマンス計測用。
   GCの邪魔が入らない状態での基準を計測するためにあるGC

・GCのアルゴリズムって変わらないイメージがあったけど、並列コンパクションによってまだまだ改善できる余地が生まれた印象。

・GCの基本的なアルゴリズムが分かってないと資料見てもつらそう。
自分は過去に「ガベージコレクションのアルゴリズムと実装」や「Javaパフォーマンス(G1GC解説)」といった書籍を読んでいたのでなんとかついていけた。

-----
■普通の人のためのJavaコミュニティイベントのススメ(【ランチ付き】ランチセッション )#ccc_ls
資料:https://www.slideshare.net/TakaakiSugiyama/java-jjug-ccc-2018-spring

(他のカンファレンスでこういうのに慣れていたから
 ささっと並んで弁当もらったけど(初回特権)
 ほんとに初めてだともらっていいのか躊躇するよなぁ...。)

・本だと情報が古い。最低限、出すまでに1年。英語が読めればすぐキャッチアップできる。
・イベントのコツ→Don't be shyの精神(By John Gage) とのこと。フランクに話しかけると面白いかもね。

-----
■Pivotal認定講師が解説!ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説 #ccc_e3
資料https://www.slideshare.net/masatoshitada7/reactivespring-5-spring-boot-2
(すごい人数。会場ほぼ埋まった。300人近く聴講か。)

Core→JDK8ベースになった。λやDate and Timeに対応。9/10にも対応。(ビルドも9と10で実施している。7未満だと動かない。)logging周りの改善+新規アノテーション追加。
しばらくはjava8ベースにした方が良い。バイトコードレベルはjava8。(ASM5
がjava9に対応していない。)

@NonNull、@Nullable→コードの挙動に変化はないが、IDEでのヒントとなる。
---

Spring Web
HTTP2(Servlet 4.0)対応。ただし、アプリケーションサーバが対応していないとダメ。
Bean Validation 2.0対応→@Email、@NotEmpty、@NotBlank(アノテーション増える。)

WebMvcConfigurerAdapter非推奨。
class ~ extends WebMvcConfigurerAdapter

class ~ implements WebMvcConfigrer に変化する。
 java8のインタフェースのデフォルトメソッドによってアダプターが不要に。
 (デフォルトメソッドによって抽象クラスがなくなっていくのか?)

あまりJava8文法知らないって人もSpring5フレームワークに乗っかると
いよいよ知っておかないとマズそうな感じになりそうだなぁと思った。

Actuatorの話のところでよく分からなくなっていた。調べないといかん。

-----
■Java 10まとめと、どうなる Java 11
資料:https://www.slideshare.net/nowokay/java10-and-11

・リリース番号の付け方
18/3 JDK 10
18/4 JDK 10.0.1
18/7 JDK 10.0.2
18/9 JDK 11 LTS
18/10 JDK 11.0.1 LTS
19/1 JDK 11.0.2 LTS
(間の0の役割はなんだろう?)
移行のタイミングとしてはjava8→java11になると思うが猶予3ヶ月なのツラそう。
AWTとSwingがコミットされ続けているのを聞いて少し嬉しくなったり。

・Java10
JEP 316: Heap Allocation on Alternative Memory Devices
不揮発メモリへのヒープ割当。
ハードウェアが変わることで作り方、アルゴリズムに変化でてきそうな話。

・java11
「No one use CORBA!」でクスッときた。昔ちょっとだけ触ったことがあるんだよなぁ。
StringクラスにAPI追加。strip()地味に嬉しい。
Raw String Literals実装のために追加されているようだ。

ArrayIndexOutOfBoundsExceptionのエラーメッセージを親切に。
最近のwindowsのアクセサリツールの機能拡充並みに今更な...と思ったが、絶対直したほうが良い。

-----
■JavaエンジニアのためのDocker入門 ? 仮想開発・テスト環境構築 ? #ccc_e5
ここもすごい人数だった。
Dockerの基本から説明。

Dockerイメージ(ひな形)からコンテナが作られる。
Dockerfile(コンテナの構成を記述。これをビルドするとイメージができる。)
VSCodeの拡張を入れると編集しやすいようだ。

従来の仮想化とコンテナ技術の違い、このあとのセッションと合わせて聞いてたらだいぶ分かった。リソース利用効率が高いコンテナ形式が主流になるのも納得。

・1つのコンテナにサービスを詰め込みすぎない。
 DB,ウェブアプリケーションサーバ、独立したコンテナにする。
 Docker Composeで複数コンテナ間の連携を管理できる。

・コンテナはいつ消えてもいいようにする。要するに状態を持たせない。
 コンテナ内で行った作業はDockerfileに反映させる。
 DBなど永続化するファイルはホストOSのファイルにマウントさせる。

・他の人が用意したDocker はDockerHubから取れる。公式はofficialマークあり。

・Linux系なら便利だなぁと思っているのだが、windows上でwindowsコンテナを
作れるとすごい嬉しいと思う人が多いと思う。調べてみるとwindowsコンテナも扱えるようだが...。

-----
■自分のDocker/K8s環境をタダで手に入れる ICP Community Editionで簡単構築 #ccc_c6
K8s→Kubernetes(クーバネティス)
オーケストレーションツールのデファクトスタンダード。

しかし、知らないツールばかりで置いてけぼりだなぁと思った。
大抵Web企業の技術が2,3年したらSIerに浸透し始めるそうなので、
そろそろSIer企業でも使い始める年になりそうとのこと。

大抵k8sを使うとしたらクラウド上になるので個人で試すには敷居が高いけど
IBMのprivateクラウドなら簡単に試せる。

-----
■懇親会
source_review.jpg
ソースレビューの図

今までブログで見てきた人が実際に喋っているところに参加するのは面白いし、他の技術者とも交流することができたので、次回も参加したいと思う。もっと若い時からこういうイベントには参加しておくべきだったなぁと少し後悔。

トラックバック(0)

トラックバックURL: http://hoge.sub.jp/blog-cgi/mt/mt-tb.cgi/692

コメントする

このブログ記事について

このページは、Lyoが2018年5月27日 18:52に書いたブログ記事です。

ひとつ前のブログ記事は「HHKB 20周年記念ユーザーミートアップ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

OpenID対応しています OpenIDについて
Powered by Movable Type 4.261