連載
» 2010年06月07日 00時00分 UPDATE

Javaから見た.NET(1):プログラマが知っておきたいJavaと.NETの違い (1/4)

システム開発がますます複雑化していく中、エンジニアには、テクノロジを理解して、さまざまな場面に適した選択が求められます。本連載では、Javaと.NETの基本的な仕組みから最新の傾向や技術などについて、数回に分けて紹介します

[高山智史,株式会社クロノス]

いまさら聞けない、Javaと.NETの違い

 今日、アプリケーション開発・実行のプラットフォームは、大きく2つのテクノロジに収束しているといえるでしょう。

 1つは、エンタープライズ・アプリケーション開発の定番ともいえる「Java」です。

 実行環境開発環境の無償提供、OSを自由に選べること、フレームワークや開発環境が充実していることが人気の理由です。大規模アプリケーションの採用実績も多く、ほかのプラットフォームをリードしてきました。

 もう1つは、マイクロソフトが発表した「Microsoft.NET」構想に基づいた「.NET」です。

 プラットフォームが主にWindowsに制限されますが、各技術や開発環境がオールインワン・パッケージとして提供されており、いくつもある競合技術を自ら評価して、最適なものを選ぶといった手間を省略できます。開発環境との親和性も高いので、高い生産性を期待できるものとしてシェアを広げています。

さまざまな場面に適した選択を

 システム開発がますます複雑化していく中、エンジニア/プログラマには、テクノロジを理解して、さまざまな場面に適した選択をすることが求められます。

 本連載では、「Javaから見た.NET」というテーマで、各の基本的な仕組みから最新の傾向や技術などについて数回に分けて紹介します。初回は、Javaと.NETの実行環境、開発言語、開発環境についてです。

Javaプラットフォーム、6つの主な特徴

 JavaプラットフォームはJava言語や実行環境や開発環境、アプリケーションなどを総称して呼ばれています。

 Javaのプログラムは、OSやハードウェアに依存しない「Javaバイトコードバイトコード」と呼ばれる中間形式に一度変換します。実行時に「Java仮想マシンJVM)」と呼ばれるソフトウェアによって、各プラットフォームで実行可能な形式に変換する方法をとっています。そのため、Javaプログラムの実行に必要な仮想マシンや、開発に必要な標準ライブラリセットおよびコンパイラを個々の環境に合わせて作りさえすれば、Javaプログラムはすべての環境で同一に動きます。

r13t94_bor_rou_sha_w400.jpg

 仮想マシンが入ることによる実行速度の低下を軽減するため、≪≫Javaプログラムの実行直前(Just in Time)にJavaバイトコードを各プラットフォームが実行できる形式に変換して実行するJITコンパイラ方式が採用されています。

【1】3つのエディション

 Java言語は、デスクトップはもちろん、サーバ、携帯端末など、さまざまな用途で使われているためAPIの数も膨大です。そのため、Java言語のAPIは次の3つのエディションを規定しています。

  1. Java SE(Java Platform Standard Edition)
    Javaの標準的な規格。一般の学習用や簡易なプログラムの実装から、ワークステーション、パーソナルコンピュータやサーバなどの機器で、汎用的な用途でも使用されている。Javaプラットフォームプログラムで役立つ基底のAPIを含んでいる。実行環境や開発環境であるJREJDKがインターネット上から簡単に入手可能であり、情報も充実している
  2. Java EE(Java Enterprise Edition)
    Javaの中でもエンタープライズシステム開発に対応したプラットフォーム。サーバサイド機能を備えた実行環境、開発環境の規格。Java SEにあるクラスすべてを含み、ワークステーションよりもサーバ上でプログラムを動かすのに、より役立つ機能や、大規模システムを開発するための、さまざまなAPIが追加されている
  3. Java ME(Java Platform Micro Edition)
    携帯電話、PDA、テレビのようにリソースが制限されたデバイスに載せるためのJavaのエディション。一般的にPCなどで利用する環境より、より小さな環境で動作するためのJavaの小型のセット

編集部注:都合により一部コンテンツを削除・改編させていただきました。内容に不備があったことをお詫び申し上げます(2010年6月11日)


コラム 「グーグルのJava“Android”とは」

最近では、Javaベースで作られた携帯端末向けのプラットフォームとして、グーグルによって開発された「Android」もあります。

ただし、使用されるJavaはグーグルが独自開発したJava仮想マシン上で動作するため、Java MEとの互換性は保証されていません。


 またPCやモバイルの分野でリッチクライアントRIAを実現するプラットフォームとしてJavaFXが登場しました。詳細は、次回で取り上げます。

【2】マルチスレッド処理の実装

 Javaでは、スレッドを言語仕様で規定しており、マルチスレッドによる複数の処理を同時に実行できます。

【3】簡潔なメモリモデル

 Javaプログラムでは、メモリアドレスに対して直接アクセスできません。それは、メモリの確保・解放などの管理が、Java仮想マシンに統合されたGCガベージ・コレクション)の機能によって行われるからです。これにより、プログラマがメモリ(主記憶装置)を管理する負担を軽減しています。

 近年のJavaでは、「世代別ガベージコレクション」という、より効率的な技術を導入しています。

【4】分散オブジェクト環境のソフトウェアの開発

 Javaでは、分散オブジェクト環境を実現するための手法である「Java RMI」という技術を標準で使用できます。ほかにはOMGが定めた分散オブジェクト技術仕様であるCORBAを使用すると、Java以外のさまざまなプラットフォーム間で分散システムを構築できます。

 さらに、「RMI-IIOP」という技術を使用すると、RMIコンポーネントをCORBA環境で動作できます。

【5】セキュリティを考慮した設計

 言語仕様として、以下のセキュリティモデルが規定されています。

  • クラスローダによるクラスのロードチェック
  • JVMによる実行時のクラスファイル・ベリファイアによる検証チェック
  • サンドボックスモデルに基づいたセキュリティ機構

【6】クラスライブラリ

 Javaでは、数多くのクラスやメソッドなどが含まれているクラスライブラリが定義されています。JavaでいうAPIはクラスライブラリのことです。Javaのクラスライブラリは「パッケージ」と呼ばれる単位で機能ごとに分類されています。パッケージは相互に関連するクラスをフォルダごとにまとめて管理する機能です。実際にはパッケージ名をフォルダの階層構造と合わせることで実現します。

 以下がJavaで提供されている主なパッケージです。

表1 Javaで提供されている主なパッケージ
パッケージ 概要
java.lang 基本言語機能と言語中枢機能
java.util コレクションデータ構造クラス
java.io 入出力操作
java.math 多倍長演算
java.nio JavaによるNew I/Oフレームワーク
java.net ネットワーク命令、ソケット、DNSルックアップ、……
java.security 暗号鍵生成、暗号化、復号
java.sql データベースへアクセスするためのJDBC(Java DataBase Connectivity)
java.awt ネイティブGUIコンポーネントのパッケージの基本階層
javax.swing プラットフォーム非依存リッチGUIコンポーネントのパッケージ階層

 最新のJava SE 6では、スクリプト言語が公式にサポートされました。これにより動的言語の導入が容易になりました。さらに、このバージョンで正式にWebサービスもサポートしています。

 またサードパーティがJavaプラットフォームを対象にした多くのコンパイラやインタプリタを作っています。GroovyJRubyJythonScalaなどが、それに当たります。Java言語にアスペクト指向技術のための拡張を施したAspectJなどもあります。

       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。