Java

HotSpotコンパイラとVMがやっていること。

パフォーマンスに効果を発揮するのがメソッドのインライン化なのだけども、 HotSpotVMはなんと動的にメソッドインライン化とインタプリタを使い分けているらしい。(トリガーは不明だけども・・・) 実行時にはインライン化とインタプリタどっちかに限定して…

メソッドにfinalをつけると高速化されるわけ

メソッドにfinalをつけると高速化される理由はコンパイル時の最適化でメソッドのインライン化が実施され、メソッドコールのオーバヘッドが少なくなるため。その代わり作成されるクラスファイルサイズは大きくなる。 通常は、コンパイルオプション "-o"をつけ…

StringBufferにおけるパフォーマンスチューニングの落とし穴

文字列を連結させる場合にStringBufferを使え(最近はStringBuilderか)というのが定石だがじつは落とし穴がある。 下記ソースではいずれも文字列を連結する処理なんだけども、”+”を使用するのが一番速い処理となってしまっている。 ちなみにコンパイラの最…

POIで作成したエクセルファイルをJavaで動的に開く方法

Apache POIもそろそろ3.5 beta6がでるようです。 大幅なメモリ消費を改善してほしいものですが、どうでしょうか!? POIでExcelファイルを作成してその作成したファイルをすぐ確認させたいときに 動的にファイルを開く方法がある。Java6以降になってしまうの…

Oracle、Sunを買収

Oracle、Sunを買収とのこと Oracle、Sunを買収 IBMでもHPでもなく、Sun Microsystemsを射止めたのはソフトウェア会社のOracleだった。 2009年04月20日 21時35分 更新 米Oracleは4月20日、米Sun Microsystemsを約74億ドルで買収することについて、Sunと合意し…

ジェネリクスのパフォーマンス効果とArrayListとVector比較

ArrayListとVectorではArrayListが早いと聞くけど、どの程度違うものか計測してみた。 また、ジェネリクスを使った場合とそうでない場合もどの程度違うのか計測した。 ArrayList(なし) ArrayList(あり) Vector(なし) Vector(あり) 27ms. 25ms. 37ms. …

JTableのJTalbeHeaderの高さを変更して列幅の合計が1200ピクセルを超えて横スクロールするとバグった。

JTableのJTalbeHeaderの高さを変更して列幅の合計が1200ピクセルを超えて横スクロールするとバグった。 原因はつかめてないのだけども現象として記録。 APIのバグっぽいんだけどなー。以下ソース public class TableTest { //検証1 // private Object d…

え?IBMのSun買収は決裂?

IBMのSun買収は決裂したって?http://d.hatena.ne.jp/kensir0u/20090318/1237377064の経過報告 メディアの報告によると、Sun Microsystemsを買収するというIBMの協議が破綻した。伝えられるところによると、IBMは1株およそ9.5ドルを提供した。Sunの株の価値…

本になったら絶対買うドキュメント。

JavaDocは本になったら絶対買うんだけどなー。

SwingのJFileChooserの代わりにSWTのFileDialogを使う方法

○JFileChooserの起動遅延バグhttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6372808 JFileChooserの初期起動が遅いのでそこだけSWTのFileDialogを使うことにした。 public class SWTSwing { public static void main(String[] args) { JFrame frame =…

EBCDICかとおもってたらEBCDIKだった件

変換テーブルどっかにころがってないかなー?? JavaでもCでもいいので。 調べたらCP930でいけそうだ。

Java6でライブラリ拡張フォルダではまった件。

特に意識していなかったんだけども、 JDK 6u10からインストールフォルダがデフォルトでjre6になったらしい。 http://java.sun.com/javase/ja/6/webnotes/6u11.html本日、ずっとC:\Program Files\Java\jre1.6.0_07\lib\extにjarを突っ込んでて、あれ?うごか…

JFileChooserの初期起動が遅い件について、JNI経由で呼び出しをしようとしてみた。

JFileChooserの初期起動が遅いのでJNI経由で呼び出しを行うと意外と早いんじゃないかと思って実験してみた。 まずは、よさそうなJNIブリッジのライブラリがあったのでこれを使用することにした。(※JNI詳しくないし、めんどくさいから、Cから作るくらいなら…

EncodeUtil作った。

仕事で文字コード変換が必要になりそうなので、ためしに作ってみた。 public class EncodingUtil { private static final String EMPTY_STRING = ""; private static final byte[] EMPTY_BYTES = EMPTY_STRING.getBytes(); public static String convert2byt…

○○Implの命名方法は悪!?

この前ケント・ベックさんの実装パターンという本を読んだんだけども。 ソースはコミュニケーションをとるように記述する必要があると述べていた。 その中で、○○Implのネーミングはひどいと言っている。 たしかに実装クラスとインターフェースで区別を付けた…

JavaのIntrospectorを使うときに気をつけること。

クラスの情報を取得する際にIntrospectorのgetBeanInfoを使うと思うのだけど、 その際、気をつけないといけないことがある。 PropertyDescriptorクラスはプロパティ情報を格納している。その中にプロパティに対するgetterやsetter情報も格納しているのだけど…

JavaのUTF-8におけるデコード処理の脆弱性を検証してみた。

情報源はこちら。http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5351http://sunsolve.sun.com/search/document.do?assetkey=1-66-245246-1http://www.unicode.org/versions/corrigendum1.html 問題は、Unicodeに準拠していないバイト配列でも中途…

GCとURLClassLoaderの問題

対象サーバーOSがWindowsのときに発生。 WarとかのアプリをTomcatとかのサーバーで起動中にMXBean使用したりして デプロイしたりアンデプロイすることがよくある。 このときに、対象リソースがURLClassLoaderで読み込まれていた場合(※通常それで読み込んで…

枯れさせるとは?

ソフトウェアのプロダクトを枯れさせるとはプロダクトの機能変更・追加が凍結された上で ・ドキュメントの充実 ・サンプルコードの充実 ・Tipsの充実 ・トラブルシューティングの充実 ・サポート期間の明示 上記、情報をたくさん提供していく必要があると思…

JBoss関連のバージョン規約はちょっと変わってる?

JBoss関連のプロダクトバージョンのつけ方 CRの記載がTYPOなのか大真面目なのか気になって調べてみた。 バージョン 説明 X.Y.ZZ.SNAPSHOT スナップショット、開発途中のバージョン X.Y.ZZ.Alpha 基本機能と基本テストを実施したバージョン X.Y.ZZ.Beta バグ…

え?IBMがSun買収?

IBMがSunを買収しようとしているって? 米IBM、サン・マイクロシステムズ買収で交渉=報道3月18日17時23分配信 ロイター [18日 ロイター] 18日付の米ウォールストリート・ジャーナル(WSJ)紙は、関係筋の話として、IBMがサン・マイクロシス…

JSR303 Proposed Final Draftフェーズ突入!

そろそろJSR303がProposed Final Draftフェーズに入るみたいです。http://jcp.org/en/jsr/detail?id=303 EJB3.1はもうすでにProposed Final Draftフェーズみたいです。http://jcp.org/en/jsr/detail?id=318

アノテーション指向プログラミングの苦悩

現在のJava界隈の主流な流れとしてアノテーションベースのプログラミングがあげられる。 これはCoC(Convention Over Configration)プログラミングの問題点を回避したいという意図も含まれる。 CoCの主な問題点は以下のとおり。 ・タイピングミスによる静的…

Getting started with JSR 303 (Bean Validation) – part 4

今回はバリデーションの使いどころを説明します。 バリデーションはアプリケーションにおいてI/Oが発生する場合は必須と言って いいほどの処理です。 バリデーションはある条件にもとづき、値の是非を検証します。その是非を検証するための条件は大きく2種…

Getting started with JSR 303 (Bean Validation) – part 3

Default message interpolationデフォルトメッセージ補完の説明をします。 バリデーションアノテーションはmessageプロパティが必須です。 そのmessageプロパティにセットされたトークンが補完対象のメッセージとなります。 補完対象のトークンは"{}"で囲ま…

Getting started with JSR 303 (Bean Validation) – part 2

Creating custom constraint annotationsカスタムバリデーション用アノテーションの作成を説明します。 まず、カスタムのアノテーションを定義します。 アノテーションには以下のアノテーションを付加する必要があります。・@Target( { METHOD, FIELD, ANNOT…

Getting started with JSR 303 (Bean Validation) – part 1

Using Bean Validation with Spring(Springで利用する場合) 標準の使い方はValidation APIより デフォルトバリデーションファクトリを生成します。次にファクトリよりバリデーションを取得します。 ValidatorFactory factory = Validation.buildDefaultVal…

●Comparisons for Enums(未確定)

http://j2eeblogger.blogspot.com/2008/04/typesafe-enum-and-equals.htmlEnumで単純に比較演算子が使用できるようになるというものです。 こちらもJava7に導入されるかは未定で、現在、検討中のようです。■使用例 //こう書く必要があったのが if(comp1.ordi…

●Strings in switch statements(未確定)

http://yost.com/computers/java/string-switch/index.htmlSwitch文でStringが使用できるようになるというものです。 こちらはJava7に導入されるかは未定で、現在、検討中のようです。■使用例 String pattern = "A"; switch (pattern) { case "A": return "A…

●Null-Dereference Expression

Nullチェックの方法が簡潔に記述できるようになります。http://docs.google.com/View?docid=dfn5297z_19pnsjkfc6 http://www.slideshare.net/Stephan.Schmidt/better-strategies-for-null-handling-in-java句、節の最後に"?"で記述します。Groovyの表記を真…