Thread.sleep(0) のオーバーヘッドがヤバイ件

あるプログラムがどうも遅いので、調べてみると Thread.sleep(long) が怪しかった。もちろん、スリープしているならプロファイルで遅い結果が出てくるのも頷けるが、Thread.sleep に渡していた値は 0。 どうやら、Thread.sleep(0) のオーバーヘッドは予想以…

パニック障害になった(予後編その2)

前回まで パニック障害になった パニック障害になった(予後編) 今回 時が経つのは早いもので、パニック障害で休職して復職してから二年が経過した。 今までの間に過去の記事に何件もコメントが付いて、微力ながら自分の体験記が多のパニック障害者の役に立て…

書評:理性の限界

理性の限界――不可能性・不確定性・不完全性 (講談社現代新書)作者: 高橋昌一郎出版社/メーカー: 講談社発売日: 2008/06/17メディア: 新書購入: 56人 クリック: 299回この商品を含むブログ (178件) を見る様々な分野の専門家が集い、ディスカッションをすると…

コンシステントハッシュを使う際の仮想ノード数の決め方

コンシステントハッシュ法は便利なアルゴリズムだが、注意点がある。 仮想ノード数をいくつにするかという問題で、仮想ノード数が多ければ多いほどファイルは均一に分散するというわけではないという事実だ。 多数のキャッシュオブジェクトをいくつかのキャ…

2012 年書籍ベスト 10

2012 年に読んだ本の中で、良かった本をここに記録しておく。 技術書編と非技術書編に分けて、それぞれのベスト 10 。2012 年に発売されたものではなく、あくまで 2012 年に自分が読んだもの。ではまず技術書編から。

書評:ふつうの Linux プログラミング - 入門本のかくあるべき姿

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道作者: 青木峰郎出版社/メーカー: ソフトバンククリエイティブ発売日: 2005/07/27メディア: 単行本購入: 35人 クリック: 450回この商品を含むブログ (145件) を見るふと軽い気持…

書評:天地明察 - 日本の暦法、ここにあり

天地明察(上) (角川文庫)作者: 冲方丁出版社/メーカー: 角川書店(角川グループパブリッシング)発売日: 2012/05/18メディア: 文庫購入: 3人 クリック: 37回この商品を含むブログ (98件) を見る 暦は天意とされる時代に、算術を持って天を解明し、改暦に挑んだ…

書評:Gene Mapper

Gene Mapper -core- (ジーン・マッパー コア)作者: Fujii Taiyo出版社/メーカー: Taiyo Lab発売日: 2012/07/12メディア: Kindle版購入: 7人 クリック: 58回この商品を含むブログ (15件) を見るKindle Paperwhite で最初に読んだ書籍が本書で良かった。 なに…

Kindle Paperwhite レビュー

Kindle Paperwhite出版社/メーカー: Amazon.co.jp発売日: 2012/11/19メディア: エレクトロニクス購入: 79人 クリック: 11,101回この商品を含むブログ (200件) を見る Kindle Paperwhite が届いたので早速レビュー。 買ったのは Kindle Paperwhite (以下 Kind…

C言語がコンパイルされて実行可能になるまでの流れ

コンパイルの処理は大きく分けて下記の処理にわけられる。 プリプロセス コンパイル アセンブル リンク この記事では、C言語の Hello World を過程毎に追い、プログラムが出来上がるまでの流れを追う。

書評:楽園の泉

楽園の泉 (ハヤカワ文庫SF)作者: アーサー・C.クラーク,Arthur C. Clarke,山高昭出版社/メーカー: 早川書房発売日: 2006/01メディア: 文庫購入: 3人 クリック: 63回この商品を含むブログ (93件) を見るかくも美しきかな、軌道エレベーター。 アイディアは昔…

クロスプラットフォームな Java コードの書き方

仕事で、Ubuntu 上のみで稼働する Java 製のプログラムを Windows で動くよう対応したので、対応するのに必要だった点を記録しておく。

書評:プログラミング作法

プログラミング作法作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博出版社/メーカー: アスキー発売日: 2000/11メディア: 単行本購入: 58人 クリック: 1,137回この商品を含むブログ (201件) を見る今までたくさんの技術書を読んで…

強烈に素晴らしいプロダクトに変貌した Apache Solr - Solr 4.0 登場

Apache Solr 4.0 がリリースされた。 本記事では Solr 4.0 の新機能や改善された点のうち気になるものを紹介する。 概要 Solr 4.0 では、下記の変更が入る。 83 個の新機能 13 個の最適化 121 個のバグ改修 Solr 4.0 はメジャーバージョンアップにふさわしい…

書評:1Q84

1Q84 BOOK 1作者: 村上春樹出版社/メーカー: 新潮社発売日: 2009/05/29メディア: 単行本購入: 45人 クリック: 1,399回この商品を含むブログ (1308件) を見る ノーベル賞を取り逃がしたというニュースで思い出したので。 本書 1Q84 は村上春樹による長編大作…

なぜ C++ のコンパイルは遅いのか

なぜ C++ のコンパイルは遅いのか。 理由1 バイトコードみたいな高級なもん出力してんじゃねーんだ!こっちは機械語出力してんだよ! なんでもVMまかせのてめーらとは違うんだよ! 理由2 構文が他の言語みたいに単純じゃねーんだよ!特にテンプレートがやべ…

デストラクタが無い言語はオブジェクト指向言語を名乗るな

デストラクタが無いと、真のオブジェクト指向でコードを書くことはできない。 これが理解出来てない人が割と多いようなので、ここに記録しておくことにする。 前提知識 デストラクタとは、オブジェクトを破棄する際に呼び出される関数 Java のファイナライザ…

Java も brainf*ck も大差無い件

Java で Hello world を書くとこうなる。 \u0070\u0075\u0062\u006C\u0069\u0063\u0020\u0020\u0020 \u0063\u006C\u0061\u0073\u0073\u0020\u0020\u0020\u0020 \u0053\u0061\u006D\u0070\u006C\u0065\u0020\u0020\u0020 \u0020\u007B\u0070\u0075\u0062\u006…

ファイルに書きこみを行ったらかならず fsync しよう

通常、なんの考えも無しにプログラムがファイルに書きこみを行った後、運悪くシステムがクラッシュするとファイルが失われる可能性がある。通常のファイル書き込みはファイルに書き込んでいるように見えて実はバッファがメモリ上に蓄えているだけだからだ。…

書評:老ヴォールの惑星

老ヴォールの惑星 (次世代型作家のリアル・フィクション ハヤカワ文庫 JA (809))作者: 小川一水出版社/メーカー: 早川書房発売日: 2005/08/09メディア: 文庫購入: 16人 クリック: 121回この商品を含むブログ (288件) を見るこれまた素晴らしい本に出会ってし…

書評:素数夜曲

素数夜曲: 女王陛下のLISP作者: 吉田武出版社/メーカー: 東海大学出版会発売日: 2012/06/26メディア: 単行本購入: 6人 クリック: 266回この商品を含むブログ (10件) を見るこれはこれは、またしてもとんでもない良書に出会ってしまったものだ。

String#intern したオブジェクトをロックオブジェクトとして使ってはいけない

「文字列をロックオブジェクトとして利用したい」場合がある。 例えば渡されたファイルに処理をするメソッドで、ファイルごとに排他処理をしたいとする。しかしファイルをそのままロックオブジェクトとして使ってはいけないのは明らかだ。File インスタンス…

MySQL で UDF を定義しよう

概要 MySQL の関数は自前で定義出来る。この記事では、MySQL からシェルコマンドを叩けるようにする関数を作成する。関数を自前で定義する方法は、MySQL が用意している UDF(ユーザー定義関数、User Defined Function) の仕組みを使って行う。UDF は C や C+…

Java とサロゲートペアについて

サロゲートペアを知らない人は、その挙動に戸惑うだろう。直感に反する挙動をするからだ。次の Java コードを実行すると何が表示されるだろうか。 String val = "𠮷"; System.out.println(val.length()); val は見た目上は一文字なので 1 と表示することを期…

全文検索エンジン Solr のパフォーマンスチューニングについて

この記事は古くなりました。新しい知見は下記を参照。aoking.hatenablog.jp 概要 全文検索エンジン Solr を使用していて、パフォーマンスチューニングに四苦八苦した話。 ここでは、検索時ではなくドキュメントの追加時についてのチューニングについて記して…

ストライピングロックを試す

マルチスレッドプログラミングでは、ロックの獲得が出来ずに待ち時間が発生し、パフォーマンス劣化の原因となることがしばしばある。そのような場合、まずは下記二点の検討を行う。 ロックの粒度を下げる そもそもロックしないようなアルゴリズムに変える も…

マルチスレッドプログラミングの基本

マルチスレッドプログラミングは直感とかなり異なる挙動をすることが多く、非常に困難なプログラミングであることが知られている。不具合も発見しにくく、高負荷になった時にのみ再現したり極めて稀な状態になった時にのみ再現したり等、解決が困難なだけで…

32bit, 64bit で扱える値について

2^32 は何バイト? 4GB = 4096MB = 4194304KB = 4294967296B 2^64 は何バイト? 16EB = 16384PB = 16777216TB = 17179869184GB = 17592186044416MB = 18014398509481984KB = 18446744073709552000B 2^32 秒は何年? 136年70日6時間28分16秒→ signed なのでこ…

jstack でスレッドダンプを取る

jstack というツールがある。このツールは、現在実行中の Java プロセスのスレッドの状態を取得出来るツールだ。思ったように性能が出ない時やデッドロックっぽい現象が発生した際はこのツールを使ってスレッドの状態を取得、つまりスレッドダンプを得て、そ…

適切な Java コーディングのために心がけること

良いコードを書くために心がけることを箇条書き。 Close 処理を finally で行う ダメな例 InputStreamReader reader = new HogeInputStreamReader(...); doSomething(reader); reader.close(); doSomething(reader); で Exception が発生した場合に close さ…