谷本 心 in せろ部屋 このページをアンテナに追加 RSSフィード

2016-12-08

Optimizing JavaというJavaパフォーマンス系の書籍が面白そう

急激な冷え込みのせいで「寒い!」というつぶやきがTLに散見されるこの頃ですが、皆さんお風邪など召していらっしゃらないでしょうか。

否応なしに寒いという言葉に反応してしまう、けなげなエンジニアの @ です。


このエントリーは Java Advent Calendar 2016 の8日目です。

昨日は @ さんの「Java Stream APIでハマったこと」で、

明日は @ さんの「マイクロベンチマークツール、JMHについて」でした。


今日のエントリーでは、Javaのパフォーマンス系書籍を紹介したいと思います。

Optimizing Java - O’Reilly Media

URLを見るにつけ、あのオライリー様のサイトですら拡張子が由緒正しい .do なのですから、日本のSIerStrutsを使うことをどうして否定できましょうか。

いえ、今日はそんな話題ではありません。


紹介したいのは上のリンク先の本、「Optimizing Java - Practical Techniques for Improved Performance Tuning」です。名前の通り、Javaのパフォーマンスに関する書籍です。まだEarly Releaseの段階で、全体の1/3ほどしか書かれていませんが、現状の版を入手したので紹介したいと思います。


ここまでで、「あれ、なんか似たような本がなかったっけ」と思った方がいらっしゃるかも知れません。そう、オライリー社からは2015年に「Javaパフォーマンス」という書籍が出版されています。

Javaパフォーマンス - O’Reilly Japan

こちらの日本語版では、私も監訳者まえがきを書かせて頂き、Java Day Tokyoで寺田佳央さんと共にサイン会を行いました。

当時はきっと「この寺田さんの横にいて本に落書きしてる人、誰なんだろう」と思われていたかも知れませんが、私を誰だと思ってるんでしょう、せろさんだぞ?


この2冊について、比較しながら紹介しましょう。


目次

Javaパフォーマンス」の目次は、次の通りです。

1章イントロダクション
2章パフォーマンステストのアプローチ
3章Javaパフォーマンスのツールボックス
4章JITコンパイラのしくみ
5章ガベージコレクションの基礎
6章ガベージコレクションアルゴリズム
7章ヒープのベストプラクティス
8章ネイティブメモリのベストプラクティス
9章スレッドと同期のパフォーマンス
10章Java EEのパフォーマンス
11章データベースのベストプラクティス
12章Java SEAPIのパフォーマンス

JavaのメモリやGCスレッドに関する紹介から、SE / EEやデータベースのパフォーマンスに広げた話をしています。


一方、「Optimizing Java」の目次は次の通りです。

Chapter 1Optimization and Performance Defined
Chapter 2Overview of the JVM
Chapter 3Hardware and Operating Systems
Chapter 4Performance Testing
Chapter 5Measurement and Bottom-Up Performance
Chapter 6Monitoring and Analysis
Chapter 7Hotspot GC Deep Dive
Chapter 8Garbage Collection Monitoring and Tuning
Chapter 9Hotspot JIT Compilation
Chapter 10Java Language Performance Techniques
Chapter 11Profiling
Chapter 12Concurrent Performance Techniques
Chapter 13The Future

うん、ほとんど一緒やん?


「Optimizing Java」には、「Javaパフォーマンス」では触れられていたSEやEEの話などはないため、そこが差分になりそうにも見えます。ただ正直、「Javaパフォーマンス」の10章以降はちょっと薄口な感じでしたので、そこを飛ばせばほとんど同じ内容を網羅していると言えます。


では、何が違うんでしょうか。


Javaパフォーマンス vs Optimizing Java

僕が見た限りでは「Javaパフォーマンス」は教科書に近い内容、「Optimizing Java」はやや読み物寄りの内容になっています。

「Optimizing Java」は、現在執筆されているChapter 5までしか読めていませんが、「Javaパフォーマンス」には書かれていなかったOSJVM周りのレイヤーの話や、テスト戦略の話など、少し目線が違った内容を書いていました。


たとえば、Javaのクラスファイルが「0xCAFEBABE」から始まっていることは、Javaに詳しい方なら既にご存じかと思います。ただ、その先はどうなっているのか。

書籍では次のように紹介されています。

  • Magic Number (0xCAFEBABE)
  • Version of Class File Format
  • Constant Pool
  • Access Flags
  • This Class Name
  • Super Class Name
  • Interfaces
  • Fields
  • Methods
  • Attributes

この先頭を取って

M V C A T S I F M A、

語呂合わせして

My Very Cute Animal Turn Savage In Full Moon Areas

なんて紹介されています。


「僕のとってもかわいい猫は、満月のエリアで凶暴になる」

・・・覚えやすいんですかね、これ?


あ、なんかふざけた本だなと思ったかも知れませんが、もちろん技術的な面もきちんと紹介されています。

あくまで上に書いたようなウィット(?)も挟みながら、Javaの領域だけでなく、必要に応じて低レイヤーにも触れて紹介する本となっているわけです。そのため、「Javaパフォーマンス」を読んだ方でも楽しめる本になるのではないかと思います。


で、いつ出るの? 日本語版は?

この本は2017年3月に出版予定となっています。


また、皆さん気になる日本語版ですが、残念ながらまだ翻訳されることは決まっていないようです。

ただ原著の人気が高かったり、この後に公開される6章以降の内容が「Javaパフォーマンス」とはまた違った切り口であり楽しめるのであれば、翻訳される可能性も十分にあるんじゃないかなと思っています。


そんなわけで、日本語版が出ることを祈りながら、このエントリーを書きました。

Stay tuned, see you!

2015-11-02

[]アメリカプリペイドSIM事情 2015年

JavaOne参加レポートを書かずに、SIMレポートを書く @ です。

参加レポートは会社ブログの方に書くと思うので、そちらを待っててくださいね!


ということで日本から持ち込んだSIMフリー端末をアメリカで使う場合、

どうするのが良いねんっていう話です。


AT&T or T-Mobile

SIMフリースマホアメリカで使う場合、AT&TT-MobileSIMを買うことになります。

過去にJavaOneの会場で入りやすかったという経験から、今回もT-Mobileを選びました。


一緒に行った後輩はAT&Tをチョイスしていましたが、大きな差は見られず、

どちらもホテル、町中、JavaOne会場問わず利用できている感じでした。

またJavaOne会場はWi-Fiがかなり強化されていたおかげで、

人数が集まるキーノートセッション含め、スマホテザリング)に頼る必要は全くありませんでした。


ただ標準的なプランがT-Mobileは$40で、AT&Tが$45だったので

ちょっとだけT-Mobileの方がお得でした。


T-Mobileのどのプランがいいの?

T-Mobileにはプリペイドプランがいくつかあって、

(1) $40/月で通話/SMSし放題、データは1GBまで(超えると128kbpsに制限)

(2) $50/月で通話/SMSし放題、データは3GBまで(超えると128kbpsに制限)

(3) $60/月で通話/SMSし放題、データは7GBまで(超えると128kbpsに制限)

(4) $3/月で通話/SMSは10セント、データは別途$10/週で1GBまで(超えると通信不可)

この4つです。


(1)〜(3)は似たようなプランで、

通話SMSも発着信ともし放題、データ通信は規定量までが高速、

それを超えると128kbpsに制限されます。


いまの時代、通話SMSなんか使わないんじゃないかと思うんですが

日本みたいにLINEでヨロとか言えませんし、Uberの登録にもSMSが必要です。

アメリカでは電話やSMSを受ける側もお金が必要になります)

なので意外と発着信がフリーなのは助かったりします。


ただしデータ通信が規定量を超えた時が大変で、お金を払っても追加することができません。

プラン変更も30日経過するまではできません。つまり低速回線から逃れられなくなります。

(今回はそれを踏んでしまったので大変でした)


データ通信量が読めない場合に使いやすいのが (4) のPay As You Goプランです。

データ通信は1GBごとに$10を払えば良いので、足りなくなった時に追加すれば済みます。

ただし電話やSMSを受けるには、少し残高に入れてく必要がありますが(入金は最低$10)


一週間の滞在で言えば、

月額($3)+データ通信1GB($10)+入金($10)でも

$23なので、$40のプランよりはお得になる計算です。

本当にこれで済むのかは微妙なところかも知れませんが。


以降では、今回の経験などメモしておきます。


1GBでは1週間もちませんでした

今回は10日間の滞在なので、$40のプランを選択しました。

店頭で支払った額は$40ちょうど。特に手数料など掛かりませんでした。


ただとても残念なことに、通信が1週間弱で1GBを超えてしまい、速度制限を受けました。

ちょいちょテザリングしたり、短時間とは言えリモートデスクトップもしたので

1GBを削るには十分すぎるデータ通信をしてしまったようです。


128kbps制限を受けると、もちろん使えなくはないものの、

画像がロードされなかったり、リモートデスクトップが絶望的になったり

インターネットマンにはちょっと辛い状況でした。


先に書いたように、この状態になるとお金を追加してもどうにもならないので、

もう一枚、SIMを買い足さざるを得なくなりました。

($10で1GBを追加できるもんだと思い込んでたんですよね・・・)


追加で買ったPay As You Go

それで次に購入したのがPay As You GoプランのSIM

なぜか契約手数料が発生して、$10(本当は$15だけどキャンペーンで安く)追加で掛かりました。


お店の人の説明では、$40のプランなどにも手数料は掛かるようだったので

最初に$40のプランを$40だけで購入できたのは、

JavaOne前の特別キャンペーンだったのかも知れません。


そんなわけで、店頭で払ったのは

月額($3)+データ通信($10)+手数料($10)+税で、$24ほど。


残高を入れないとSMSを受信できないのですが

通話SMSは、必要な時だけ日本から持ってきたケータイを使えば良いや、

という強い気持ちを持って、残高を追加するのはやめておきました。


どうすれば良かったんだろうね?

結果論的には、$50のプランが正解だったと思います。

日本ではだいたい月に5GB、時には7GB近く使っていることを考えれば

10日間で2GB前後になることは推測できたはずです。

今回は、後から追加できないと知らなかったので、選択をミスってしまいました。


利用量を読めないなら、使った分に応じて追加購入できる

Pay As You Goの方が良いと思います。

ただ、残高やら何やらを追加するのって面倒だったりしますし、

想定外に残高が吹っ飛んで残念な目に遭うこともあるので、

その手間を考えると、通常の月額プランの方が良いんじゃないかなと思います。


そんなわけで、次も機会があるなら、3GBのプランにするかなーと思った次第です。

いや、ソフトバンクアメリカ放題を使えば、こんなことに悩まなくて済むんですけどね!