昨日に引き続き、OpenFlowネタ。昨日のエントリの最後の方で、OpenFlowコントローラのベンチマークの話に少しだけ触れた。OpenFlowコントローラを作っている過程でOpenFlowコントローラ用のベンチマークプログラムを自作したのもあり、OpenFlowのベンチマークについて書く。 OpenFlowスイッチやコントローラのベンチマークプログラムで一番に思い浮かぶのは、OpenFlowの総本山スタンフォード大学のProf. Nick McKeownのグループが開発しているoflopsである。というか、oflops以外に少なくとも私は聞いたことがない。 oflopsはgitレポジトリから # git clone git://gitosis.stanford.edu/oflops.git で、入手可能。正しく説明すると、oflopsはOpenFlowスイッチ用のベンチマークで、同じパ
GC周りでトラブルシューティングした際の経験や、Web等で調べたことをまとめてみる。 前提 ・JVMは、SunJavaを想定。(他は使ったことないです。。。) ・SunJava 1.5-1.6を想定。 目標 マイナーGC、Full GCそれぞれが頻発することなく、かつそれぞれの実行時間を1秒未満に抑えること。 マイナーGCは1秒未満どころではなく、もっと短くなるべき。どれくらいが理想かは?(0.1秒未満ぐらいを目指したい?) 連続した負荷状態(想定されるピークアクセス)でもOutOfMemoryErrorが発生しないこと。 理想的な状態は、上記に加えて、Full GCの発生が低頻度であること。 具体的には、できるだけマイナーGCで短命オブジェクト(1回使ったらもう使わないようなオブジェクト。逆にセッションオブジェクト等は長命オブジェクトとなる)を破棄させて、短命オブジェクトが、Tenu
Abstract JEmacs is a re-implementation of theEmacs programmabletext editor.It is written inJava, and currently uses the SwingGUI toolkit.Emacs is based on the extension languageEmacs Lisp (Elisp), which is a dynamically-scoped member of the Lisp family. JEmacs supports Elisp, as well as the use of Scheme, a more modern statically-scoped Lisp dialect. Both languages get compiled toJava byte
前書き お馴染み、hello worldのソース。 class Hello { public static void main(String[] args) { System.out.println("hello world"); } } このコードはコンパイルされると、こんなバイトコードになります。 ca fe ba be 00 00 00 32 00 22 07 00 02 01 00 05 48 65 6c 6c 6f 07 00 04 01 00 10 6a 61 76 61 2f 6c 61 6e 67 2f 4f 62 6a 65 63 74 01 00 06 3c 69 6e 69 74 3e 01 00 03 28 29 56 01 00 04 43 6f 64 65 0a 00 03 00 09 0c 00 05 00 06 01 00 0f 4c 69 6e 65 4e

長年Javaを書いてきた人間としてはちょっと情けないことに、先日、会社で自分の書いたコードが原因でちょっとしたバグを出してしまいました。きちんとテストファーストで単体試験は書いていたのですがテストが不十分でしたね。 バグの原因は、Fileクラスの仕様をちょっと勘違いして使っていたことが原因でした。FileクラスにはrenameTo()というメソッドがあって、このメソッドの呼び出しにより、操作が成功すればもともとFileクラスのオブジェクトに対応していたファイルの名前がファイルシステム上で変更されます。ここで、うっかり、Fileクラスが可変なクラスだと勘違いしてしまっていたのですが、実は、Java Docにも明記されている通り、Fileクラスは不変(immutable)なクラスであり、一度生成したら状態が決して変更されることがない設計となっています。これは、以下のテストケースを見ると確認でき

とても便利。 たとえば、あるサイトからHTMLをダウンロードしてファイルに保存する場合。 try(InputStream is = new URL("http://www.google.com/").openStream()){ Files.copy(is, Paths.get("C:\\Users\\kishida\\Downloads\\google.html")); } ファイルの内容を一行ずつ読み込んで処理をする場合。 for(String s : Files.readAllLines(Paths.get("C:\\Install.log"), Charset.defaultCharset())){ System.out.println(s); } まあ、直接文字列でファイルパスを渡せなかったり、デフォルトCharset使う場合でも引数が省略できなくて、まだるっこいコードになってし
Java4年目にしてちゃんと検証した。 class KanariSugoiClass { public static void main(String[] args) { String a,b,c,d,e; a = "hoge"; b = "hoge"; c = new String("hoge"); d = new String("hoge"); e = new String(a); System.out.print( "a and b are " + (a == b ? "same" : "not same") + " objects.\n" + "a and c are " + (a == c ? "same" : "not same") + " objects.\n" + "c and d are " + (c == d ? "same" : "not same") + " obj
JavaFX 2.0 betaが公開されました。いまのところ32bitWindows用だけですけど。JavaFX GA downloads で、JavaFX、あんまり興味ない人も多いかと思いますが、2.0ではWebKitベースのブラウザが入ったのです。 そして、JavaFXはJavaFX ScriptがなくなってJava言語で書くようになって、Swingに埋め込めるので、つまりJavaでブラウザが使えるようになったわけです。 ということでとりあえず表示してみました。 星にカーソルを持っていけばちゃんとidなんかが表示されるし、Ajaxな動きもちゃんとできています。 ただ、角丸スタイルは対応してない感じだったりするので、Twitter表示するとくずれぎみ。 まあ、ベータなんで、徐々に対応してもらえれば! それでも、発言にカーソルもっていってボタン押すと右側に発言内容が表示されたり、動きは

renderSnakeとは 「renderSnake」は、JavaプログラムでHTMLコードを生成するためのライブラリである。複雑な手続きを必要とせずに、単純メソッド呼び出しだけで直感的にタグを出力できることや、少ないメモリ使用量で軽量に動作するため様々なアプリケーションに組み込んで利用できることなどが大きな特徴。Webアプリケーション開発での利用も積極的にサポートしており、ServletやJSP、Spring MVC、GoogleGuiceなどとの連携にも対応している他、フォームからの入力処理を簡略化する機能などが用意されている。 renderSnakeはApache License Version 2.0にもとづいて公開されており、Google Codeに開設されたプロジェクトサイトよりダウンロードすることができる。本稿執筆時点における最新版はバージョン1.1。HTML5で追加された
StringBuilder クラスは Tiger で導入されたクラスなのですが、なんと機能は StringBuffer クラスとまったく同じなのです。 それじゃ、なぜ今になって新しいクラスを作ったのでしょうか。 それはスレッドセーフとパフォーマンスに関連します。 StringBuffer クラスのすべてのメソッドは synchronized になっており、同期化されています。このため、複数のスレッドから使用される場合でも、安全に使用することができます。 その一方で同期化にはコストがかかります。簡単にいえばメソッドを synchronized にすると遅くなってしまうのです。 しかし、StringBuffer を使うときに本当にスレッドセーフが必要ですか? 私が書いてきたコードには StringBuffer クラスにスレッドセーフが必要だったケースはほとんどありませんでした。それなのにわざわ
OracleのサイトにアップされているHello Wolrdの実装がネタにされていました。Hello Worldですからプログラムは5行しかないのですが、全体像はどうなっているか。(お察しください) 追記:さらに別の指摘がありました

JavaEE 6標準は、従来のJavaEE 5に対してさらなるEoDと軽量化を目指しているということだったのですが、いざ使おうと思うと、名前が同じアノテーションが複数のパッケージに定義されていたり、意味的にほとんど違いがないようなアノテーションが存在していたりで、初心者はもちろんのこと、ある程度ベテラン開発者であってもどう使い分けてよいものか途方にくれてしまいます。仕様は多数の人間の決めることですから、ある程度機能的な重複や矛盾があることは避けられないことですが、それでも、特にDIやEJB、管理Bean関係のAPIに対する機能重複についてはかつて経験したことがない程ひどく、これで本当にfinalの状態なのかと信じられないくらいです。さまざまなアイデアを取り込むのは大歓迎ですが、かつて仕様に統一感があった(仕様自体はまったく使い物になりませんでしたが)EJB2.1のころの時代が逆に懐かしく感
Ruby作者のまつもとゆきひろ氏が、こんな呟きを残すニュースが伝わってきた。ITMediaが、Twitterが検索フロントエンドをRuby onRailsからJavaに切り替えた結果、検索結果の待ち時間が1/3になったと報じている。Twitterでは、2011年春から以下のようにシステムを改善しており、(2)から(3)への移行で速度が大幅に改善したようだ。Ruby onRails ⇔MySQLRuby onRails ⇔ Lucene(Java)Ruby onRails ⇔Blender(Java) ⇔ Lucene(Java)Blender(Java) ⇔ Lucene(Java) ※予定 1.RubyからJavaに乗り換えて速度向上の理由 公式ブログを見ている限り、3倍の応答速度と、10倍の同時接続が可能になった理由は、非同期I/Oに依存する所が大きいようだ。

Javaのプログラムを実行した際、なんらかしらのバグや高負荷によりハングアップのような状態になることがあります。そうした際、jvmのスタックトレースを見ることでどこの処理まで到達しているか、またどの辺りでとまっているかを調査することが可能となります。 では、どのようにすればjvmで実行中のプログラムのスタックトレースを取得できるのでしょうか。 答えはいたって簡単で、jstackを実行すればよいのです。 jstackはJDKインストール時に$JAVA_HOME/bin/jstack に置かれます。JREには含まれないので注意です。 実行方法は $ jstack <pid> です。JavaSEのサイトに詳しい説明があるので、オプションなどはそちらを参考にしてください。扱いとして「試験的」となっているので、今使えるといって今後も使えるかはわからないので注意してください。 実行中のjvmのプロセ


リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く