Javaプログラミング
Java言語は,プラットフォームに依存しないアプリケーションソフトウェアの開発が行え,開発されたソフトウェアは堅牢な実行環境(仮想マシン)である Java仮想マシン (JVM) のもとで動作する. オブジェクト指向プログラミングの考え方に基づいて設計された言語であり、ソフトウェアの開発と保守の複雑さを低減し,開発効率と保守性を高めることが期待される.
- Java言語の設計概念
- 簡易性
Kiss (Keep it small and simple) な設計
C++ ベース言語から余分な機能を削除
- オブジェクト指向
最近のソフトウェア開発動向に沿ったオブジェクト指向プログラミング言語
- 親和性
C++ ライクな設計(習得の容易性)
- Java言語の特徴
- マルチプラットホーム
中間言語(バイトコード)インタプリタによる移植性向上
- 分散環境のサポート
分散処理の記述が容易
必要なクラスのみをネットワークを介して動的にロード
- 開発生産性の向上
マルチスレッド処理機能,動的メモリ管理など
オブジェクト指向言語(C++言語との共通点を残して簡易化)
- コンポーネント化、汎用化
Java beansとしてのプログラムコンポーネント化に対応
Java API群によるインタフェースの統一化
- セキュリティ機能
コードのロード時および実行時のチェック
ファイルの作成,ネットワークアクセスの制限
- Java言語の文法的特徴
- プリミティブデータタイプ
プリミティブデータタイプ(数値型,論理型,文字型)以外の要素は全てオブジェクト
- 参照タイプ
配列や文字列はオブジェクトとして扱う.
- マルチレベルブレーク
ラベル名を付与した break / continue文(goto 文はない)
- メモリ管理とガーベッジコレクション
ポインタ,ポインタ演算,malloc,free はない.
- マルチスレッド処理
ランタイムシステムと thread オブジェクトによるサポート
- C/C++言語から削除された機能
- typedef / define / プリプロセッサ
#define は定数を使用,typedef はクラスを宣言する.
- 構造体と共用体
すべてクラスとして宣言する.
- 関数
クラスを宣言し,メソッドとして定義(オブジェクト指向の徹底)
- 多重継承
インタフェース(オブジェクトが実装すべきメソッドの定義)で代用
- 演算子のオーバロード
- 自動強制型変換
- Java言語の実行形態
- JIT (Just In Time Compiler)
- 利用されるクラスをその都度,中間コードから機械語にコンパイルして実行する. 実行時にコンパイラが裏で機械語に翻訳するので,最初の1回目の実行は時間がかかる.
- 実行時コンパイルは初回,そのオブジェクトが作られるときに動作するので,コンストラクタが走るときは遅くなる.いろいろなオブジェクトを臨機応変に使用する場合はコンパイルが重くなってしまうという欠点がある.
- 通常のインターネットのアプリケーションは繰り返しが多いので,インタプリタに比べれば十分に速い.
- HotSpot
- アプリケーションは標準のインタプリタで起動される.実行時にはコードを解析してパフォーマンスのボトルネック(ホットスポット)を検出する.
- パフォーマンスを向上させるため,コードのパフォーマンス-クリティカルな部分をコンパイルするが,ほとんど使われないコード (プログラムの大部分) を不必要にコンパイルすることはない.
- 適応型コンパイラを使って,インライン化などコンパイルしたコードを最適化するための方法を判断する.コンパイラが実行時解析を行うので,最大のパフォーマンスを生み出す最適化処理を推測で判断しなくて済む.
- Garbage Collection
JVMでは,ガべージコレクション処理(GC)が不定期に実行される.このGCには,短命なオブジェクト用のGC(スタックメモリにて管理され実行)と全てのオブジェクトに対して実行されるFull GC(メモリプールにて管理され実行)があり,後者は前者に比べ数10倍以上時間がかかる.