スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-- : -- : -- | スポンサー広告 | page top↑

Javaコンパイラに最適化されたコードを逆コンパイルしてみる

Javaコンパイラの最適化がどのようなケースにおいて働くか、Javaの逆コンパイラJadを使用して検証してみました。
続きを読む
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

23 : 12 : 49 | プログラミング-Java | トラックバック(0) | コメント(2) | page top↑

式の計算結果を一時変数に格納することによるパフォーマンスの向上

不変クラスとして設計した複素数クラスComplex(Javaによる実装)」に対して、
>div()において、あらかじめ分母(c.re*c.re + c.im*c.im)を計算して一時変数denominatorに格納しているのは、この計算を2度行うとパフォーマンスが低下するためです。このように、複数回オブジェクトを参照する場合はその値を一時変数に格納することでパフォーマンスが向上します。

これですが、これは本当ですか? 最適化処理の段階でまとめられたりはしないんですか?パフォーマンスが向上しますというのであればちゃんと実験して検証すべきだと思います。
とのコメントをいただいたので、これを検証してみました。
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 41 : 14 | プログラミング-Java | トラックバック(0) | コメント(0) | page top↑

Tomcat6.0はinvokerを有効にするために特権を与える必要がある

Tomcatでinvokerサーブレットを有効にするためには、「C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf」にあるweb.xmlから以下の2箇所のコメントアウトを外すようにと参考書やWebの解説ページには書かれています。

しかし、指示通りにコメントアウトを外してTomcatを再起動すると、「java.lang.SecurityException: クラス org.apache.catalina.servlets.InvokerServlet のサーブレットは特権を与えられているので、このWebアプリケーションによってロードできません」とエラーが出てTomcatの起動に失敗します。

1箇所目
<!--
    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
-->
2箇所目
<!--
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
-->
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 15 : 00 | プログラミング-Java | トラックバック(0) | コメント(2) | page top↑

Effective Java 第2版(日本語訳)は11/27(木)発売

名著「Effective Java プログラミング言語ガイド」の第2版「Effective Java 第2版」が11/27(木)に発売されるようで、Amazonで予約を受け付けています。原著「Effective Java Second Edition」は5/9に既に発売していましたが、多くの日本人Javaプログラマが待ちわびたであろう日本語版がついにやってきました。

Effective Java 第2版
489471499X柴田芳樹

ピアソンエデュケーション 2008-11-27
売り上げランキング : 595


Amazonで詳しく見る
by G-Tools

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

15 : 26 : 59 | プログラミング-Java | トラックバック(0) | コメント(0) | page top↑

Google Web Toolkit(GWT) を使ってみた

AjaxのWebサイトを作ることになったので、今更ですがGoogle Web Toolkit(GWT)を使ってみました。
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

23 : 44 : 16 | プログラミング-Java | トラックバック(0) | コメント(2) | page top↑

JavaだけでPing(ICMP)プログラムを書くのは無理

不意に自分でPingプログラム(*1)を作ってみようと思い立ち、Javaでどう書くのか調べてみました。
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

17 : 06 : 00 | プログラミング-Java | トラックバック(0) | コメント(0) | page top↑

EclipseによるhashCode()およびequals()の生成

equals()メソッドの実装は思うほど簡単ではないと前回の記事「Javaによるequals()メソッドの実装」で書きました。そして、Javaの統合開発環境Eclipseでequals()メソッドを生成できることに触れました。また、そこでは触れませんでしたが、hashCode()メソッドもEclipseによって簡単に生成することができます。

そこで、今回はEclipseでhashCode()とequals()メソッドを生成する方法を説明します。例として複素数クラスComplexを用います。

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 00 : 00 | プログラミング-Java | トラックバック(0) | コメント(0) | page top↑

Javaにおけるequals()メソッドの実装

以前作成したJavaの複素数クラスComplexを題材として、equals()メソッドの実装について論じます。

下のプログラムは典型的な?誤りの例です。一見正しそうに見えるかもしれませんが、このプログラムには問題があります。

誤った例

public boolean equals(Complex c) {
	if (re == c.re && im == c.im)
		return true;
	else
		return false;
}
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 00 : 00 | プログラミング-Java | トラックバック(0) | コメント(0) | page top↑

不変クラスとして設計した複素数クラスComplex(Javaによる実装)

Javaで複素数(complex number)クラスComplexを作ってみました。

メソッド

  • Complex(double re, double im) /* 引数に実部(real part)と虚部(imaginary part)の値を取るコンストラクタです。 */
  • re(): double /* 実部の値を返すアクセサ(accessor)です。 */
  • im(): double /* 虚部の値を返すアクセサです。 */
  • add(Complex c): Complex /* 引数に取った複素数との和を計算して、その値を保持するインスタンスを返します。 */
  • sub(Complex c): Complex /* 引数に取った複素数との差を計算して、その結果を保持するインスタンスを返します。 */
  • mul(Complex c): Complex /* 引数に取った複素数との積を計算して、その結果を保持するインスタンスを返します。 */
  • div(Complex c): Complex /* 引数に取った複素数との商を計算して、その結果を保持するインスタンスを返します。 */
  • Con(Complex c): Complex /* 引数に取った複素数の複素共役(complex conjugate)を計算して、その結果を保持するインスタンスを返します。 */
  • abs(): double /* 絶対値(absolute value)を計算して、その値を返します。 */
  • arg(): double /* 偏角(argument)を計算して、その値を返します。 */
  • toString(): String /* 複素数を表す文字列を(a+bi)の形式で返します。 */
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

22 : 10 : 19 | プログラミング-Java | トラックバック(0) | コメント(6) | page top↑

正確な値が要求される計算にfloat,double型は使えない!

floatやdoubleといった型はコンピュータの中では2進数の浮動小数点で表現されています。そのため、0.1のようにどうしても2のべき乗では表せない(無限級数になってしまい、桁数が無限に必要)数値が多く存在します。

 0.1   0.2   0.4   0.8   0.6   0.2
x  2  x  2  x  2  x  2  x  2  x  2
――  ――  ――  ――  ――  ――
 0.2   0.4   0.8   1.6   1.2   0.4

10進: 0.1 ⇔   2進: 0.00011…

そのため、このような数値を用いて計算を行うと誤差が発生します。次の例はEffective Javaから借用したものです。

System.out.println(1.00-9*.10);
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 33 : 14 | プログラミング-Java | トラックバック(0) | コメント(0) | page top↑
| ホーム | 次ページ

プロフィール

TBVector

Author:TBVector

プロフィール

メールフォーム

記事検索

Google

最近の記事

人気の記事

過去の記事

カテゴリー

タグランキング

リンク

最近のコメント

最近のトラックバック

アクセスカウンタ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。