Java Javaの特徴

Java

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/04/16 21:58 UTC 版)

Javaの特徴

現在の正規ベンダーであるオラクルの公式アピールは、以下の通りである[12]。特に業務用システムの構築に最適であるとしている。

Java reduces costs, shortens developer timeframes, drives innovation, and improves application services as the programming language of choice for enterprise architecture, finance, and HR. Java is used in many industries including manufacturing, automotive, insurance, and public sector.
Javaは、コストを削減し、開発者の時間枠を短縮し、イノベーションを促進し、エンタープライズアーキテクチャ、財務、およびHRに最適なプログラミング言語としてアプリケーションサービスを改善します。 Javaは、製造・自動車・保険・公共部門などの多くの業界で使用されています。

オラクルによると、全世界の3億のコンピュータデバイスでJava実行環境が動作しており、全世界の200万の人員がJava開発環境を使用しており、全世界で250億枚のJava Cardが発行されている、と統計されている[12]

Javaの構文

Javaプログラム構文は、C++によく似たものである。オブジェクト指向言語の一面が強調されがちだが、C言語のような手続き型言語としてもプログラミングできる。Javaはオブジェクト指向パラダイムをそれほど強制しない。

Javaは、同時にマルチパラダイム言語でもある。JDK 1.1でJavaBeans/JavaRMI/CORBAによるコンポーネントプログラミングと、リフレクションAPIによるメタプログラミングが備えられた。J2SE 5.0でジェネリクス構文/APIによるジェネリックプログラミングが追加された。Java SE 7で並行APIによる並行プログラミングが追加された。Java SE 8ではラムダ式/関数型インターフェース/ストリームAPIなどによる関数型プログラミングが追加された。2014年(Java 8)以降の関数型とジェネリクスを多用しているJavaプログラムは、それ以前のJavaプログラムから大きく様変わりしている。

オブジェクト指向

Javaは、クラスベースオブジェクト指向である[13]クラスインターフェースインスタンスといった概念を中心にしたものである。クラスのメンバ要素は、フィールド、メソッド、静的フィールド、静的メソッド、定数、内部クラス、コンストラクタ、ファイナライザである。インターフェースは抽象メソッドと定数で構成される純粋抽象クラスである。クラスはインスタンスのひな型であり、インスタンスはクラスを実体化したものである。Javaプログラムは、1個以上のクラス定義文から形成される。Javaのクラスはカプセル化継承多態性をサポートしている。

カプセル化は、クラスメンバの可視性 (private, package, protected, public) でサポートされている。可視性とはメンバのアクセス許可範囲を定めるものであり、privateは同クラス内限定、packageは同クラス内と同パッケージ内限定、protectedは同クラス内と同パッケージ内と派生クラス内限定、publicは制限なしを意味する。パッケージはプログラム全体を任意に分割したソースファイルの1個以上のまとまりである。Javaのデフォルト可視性は、ファイル単位のpackageなので隠蔽性よりも利便性が重視されている。

継承は、スーパークラスが一つに限られる単一継承をサポートしている。多重継承は不可である。既存クラスに任意メンバを追加した新規クラスを作成できる。Javaの全クラスはObjectクラスをルートクラスとしてデフォルト継承する。Objectクラスにはロック機能が備えられており、これは並行プログラミングを前提にした仕様である。

多態性は、仮想関数抽象クラスインターフェース、動的ダウンキャストでサポートされている。スーパークラスのvirtualメソッドを、サブクラスの同名メソッドでオーバーライドできる機能を仮想関数と言う。スーパークラス変数にサブクラスインスタンスを代入してその変数からサブクラスのメソッドが呼ばれるようにするのは、サブタイピングになる。インターフェースは抽象メソッドだけの純粋抽象クラスであり、任意の数だけクラスに実装できる。実行時ダウンキャストはinstanceof演算子の実行時型チェックが可能で、ダウンキャスト失敗時は例外発生する。

プラットフォーム非依存

プラットフォーム非依存とは、Javaプログラムが特定のハードウェアオペレーティングシステムに依存せずに、あらゆる環境での共通動作を保証する概念である。”Write once, run anywhere”(一度プログラムを書いてしまえば、どのコンピューターでも動くよ)とされる。Javaのプラットフォーム非依存性は次のようにして実現されている。

  1. Javaコンパイラは、Javaソースコードを、Javaバイトコードという中間表現にコンパイルする。Javaバイトコードは、Java仮想マシン用の実行コードである。Javaバイトコードは通常、Javaクラスファイルにまとめられる。
  2. Java仮想マシンは、各プラットフォームの差異を吸収するクッション的なソフトウェアである。Java仮想マシンは、様々なコンピュータ環境対応バージョンが提供されており、各プラットフォームにJava実行環境の中核としてインストールされる。
  3. Java仮想マシンは、任意のJavaクラスファイルJavaクラスローダーで読み込み、そのJavaバイトコードを解釈実行する。インタプリタ式の解釈走行と、実行時コンパイラで解釈走行させるものがある。

Java初期のインタプリタ式で走行されるJavaプログラムの実行速度は遅かったが、実行時コンパイラ技術と動的再コンパイル技術 (dynamic recompilation) の導入によって実行速度問題はほぼ解決した。実行時コンパイラとは、一定のJavaバイトコードをまとめてネイティブコードにコンパイルして継続的に実行させる技術である。Java仮想マシンはメモリ境界とバッファオーバーフローのチェックを行いながらプログラムを走行させる。また、クラスロード時のバイトコード検証機能によって、あからさまなコード暴走や致命的エラーの頻発を事前抑止している。

マルチスレッド

Javaプログラムは、複数以上のスレッドを同時走行できる。これをマルチスレッドと言う。多数のスレッドを扱う大規模システムにも対応しており、例えばスレッドグループAPIは、スレッドたちを役割や性質でグループ化して一括操作できる。これはクライアント・サーバシステムの実装向けである。また、多数の断続的トランザクションをさばくシステムにおいて発生しがちなスレッド生成/破棄の反復による負荷増大を回避するための、スレッドプールとタスクキューを合わせたスレッドモニタAPIも用意されている。

Javaのマルチスレッド並行計算は、クリティカルセクション同期が基準にされている。Javaの全インスタンスは、ロック機能を備えているObjectクラスをルート継承しているので、クリティカルセクションのロックオブジェクトにできる。Javaではsynchronizedで指定された範囲がクリティカルセクションになる。Javaの標準ロック手法は、ミューテックスモニタである。synchronizedメソッドはその全体が排他セクションになり、そこではThisインスタンスがロックオブジェクトになる。synchronized静的メソッドでは、システム内の専用インスタンスがロックオブジェクトになる。また、synchronized(指名変数)構文でメソッド内の任意範囲をクリティカルセクションにして、そこでは指名変数がロックオブジェクトになる。

ミューテックスのモニタ以外の、カウントセマフォバリアや読み書きロックなどのロック手法は、並行APIの方で用意されている。

ガベージコレクション

Javaプログラムのメモリ管理は、Java仮想マシンガベージコレクションによって行われる。ガベージコレクションとは、すでにどこからも参照されていないインスタンスを自動的に特定して破棄し、その占有メモリ領域を自動的に解放する機能である。人の手によるオブジェクトの生成と破棄を正確に対応させるメモリ管理作業は煩雑化するのが常であり、メモリリークや不正リリースによるエラーを引き起こしやすく、バグの温床と化すのが通例であった。それらを自動化したガベージコレクションは、Javaプログラマを複雑なメモリ管理作業から解放する。

ガベージコレクタのプロセスは、システムスレッドに乗って未参照のインスタンスを探し続ける。どこかの末端だけが途切れている参照の連鎖のかたまりも正確に特定して、参照の孤島に例えられたメモリ領域を一気に解放する。Javaではガベージコレクション機能に並々ならぬ力が入れられており、その技術更新は現在も進行中である。世代別ガベージコレクタ、応答時間短縮化のレイテンシ重視ガーベジコレクタ、休止時間短縮化のスループット重視ガーベジコレクタなどが導入されて更に改訂を重ねており、運用環境別の選択使用も可能にされている。

分散コンピューティング

Javaの分散コンピューティングプログラミングは、オブジェクト要求ブローカーに準拠している。これはネットワーク上に存在する様々なプラットフォームの間で、互いに異なる環境を意識せずにリクエストとレスポンスを送りあい任意のタスクを遂行する分散システムの構築をサポートする。各プラットフォーム上で稼働されるサーバアプリケーションとクライアントアプリケーションは、それぞれオブジェクトを内包しており、業界共通規格のCORBAまたはJava独自規格のRMIが提供する運用アーキテクチャと通信プロトコルを通して、他のオブジェクトと相互にコミュニケーションする。それらは分散オブジェクトと呼ばれている。

業務用システムではすでにCORBAが普及していたので、高パフォーマンスだがJavaプラットフォーム間の限定になるRMIはその後追いであった。そのためRMIはCORBAと連携できるようにRMI over IIOPなどの様々な技術が実装されている。CORBAの通信プロトコルはIIOP、RMIの方はJRMPである。分散オブジェクトを実装するためのAPIとクラスライブラリの多くはJakarta EEに属している。分散オブジェクトの中でサーバ機能に特化されたものはEJB (Enterprise JavaBeans) と呼ばれている。

EJBは、クライアントと同期通信を行いトランザクションを管理するセッションビーン、データベースとリンクして永続データを管理するエンティティビーン、様々なイベントからの非同期通信を管理するメッセージドリブンビーンの三種に大別される。これらのEJBは、EJBコンテナに内包されて運用される。分散オブジェクト同士が通信するためのプロトコルは、IIOPかJRMPが使われる。JNDIは、照会された識別名からネットワーク上の分散オブジェクトや各種リソースのロケーションを特定して通信ないしアクセスできるようにする。

EJBコンテナは、WEBコンテナと連携して運用されるのが普通である。EJBコンテナはWEBコンテナを一般的なクライアント窓口として使用することが多い。WEBコンテナはサーブレットJSP(Java Server Pages)を内包しているWEB用サーバアプリケーションであり、HTTPプロトコルを通して一般的なWEBブラウザとの同期通信を行う。WEB方面の分散オブジェクトは、WEBコンポーネントと呼ばれる。JSPはいわゆるWEBサイトの表示に特化したコンポーネントである。サーブレットはWEBサイトへのリクエストを処理し、場合によってはセッションビーンにトランザクションを委譲するコンポーネントである。EJBコンテナではJBossWebSphereなどが有名である。EJBコンテナはWEBコンテナと統合されて提供されている事が多い。WEBコンテナではApache Tomcatが有名である。

セキュリティ

分散ネットワークプログラミングを重視しているJavaは、サンドボックスモデルに基づいたセキュリティ機構を備えている。これは遠隔ダウンロードされた追加プログラム(Javaバイトコード)による実行環境への予期せぬ操作やユーザー資源への好ましくないアクセスを防止するためのものである。分散(distributed)指向のJavaプログラムでは、Javaクラスファイルを遠隔ロードする機会が多いので、サンドボックス実行は必須になる。Javaのサンドボックスは、大抵は以下の手順になる。

  • クラスローダーは、バイトコードをダウンロードして順次クラス化する。
  • 実行環境内のセキュリティポリシーファイルに従って、各種パーミッションが各クラスに付与される。セキュリティポリシーは主に、クラス名とそのパーミッションのペアで記述されている。
  • 実行環境に元からあるクラスは、オールパーミッション付与がデフォルトである。
  • スレッドがリソースアクセスなどの操作をする度に、セキュリティマネージャが現行のパーミッションを調べて対象外なら例外を発生させる。
  • その際は、スレッドの各通過メソッドのクラスのパーミッションが全チェックされ、原則的に最少パーミッションの方に合わせる。
  • 遠隔ロードされたappletクラスなどのパーミッション皆無のクラスのメソッドを一度でも通ったスレッドは、完全なサンドボックス実行になりほとんどのリソースにアクセスできなくなる。

実際には上記に加えて、各クラスを役割やセキュリティレベルでまとめるドメイン機構、認証と承認によるユーザーパーミッション機構、バイトコード送受信時の署名付き証明書機構などが組み合わされて実装運用される。


  1. ^ 買収前はサン・マイクロシステムズによって。
  2. ^ 日本でのみ行われている[33]
  3. ^ 日本以外での Oracle Certified Associate, Java SE 8 Programmer に対応。
  4. ^ 日本以外での Oracle Certified Professional, Java SE 8 Programmer に対応。
  1. ^ Chaudhary, Harry H. (2014年7月28日). “Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans”. 2016年5月29日閲覧。
  2. ^ The Java Language Environment” (1996年5月). 2014年5月6日時点のオリジナルよりアーカイブ。2014年5月6日閲覧。
  3. ^ The Java Language Specification, 2nd Edition”. 2011年8月5日時点のオリジナルよりアーカイブ。2008年2月8日閲覧。
  4. ^ The A-Z of Programming Languages: Modula-3”. Computerworld.com.au. 2009年1月5日時点のオリジナルよりアーカイブ。2010年6月9日閲覧。
  5. ^ Patrick Naughton cites Objective-C as a strong influence on the design of the Java programming language, stating that notable direct derivatives include Java interfaces (derived from Objective-C's protocol) and primitive wrapper classes. [1] Java Was Strongly Influenced by Objective-C - ウェイバックマシン(2011年7月13日アーカイブ分)
  6. ^ What is Java and why do I need it?” (英語). 2019年1月閲覧。
  7. ^ 1.2 Design Goals of the Java™ Programming Language”. オラクル (1999年1月1日). 2013年1月23日時点のオリジナルよりアーカイブ。2013年1月14日閲覧。
  8. ^ Write once, run anywhere?”. Computer Weekly (2002年5月2日). 2009年7月27日閲覧。
  9. ^ a b Chan (2019年1月22日). “The 10 most popular programming languages, according to the 'Facebook for programmers'”. Business Insider. 2019年6月29日時点のオリジナルよりアーカイブ。2019年6月29日閲覧。
  10. ^ JavaOne 2013 Review: Java Takes on the Internet of Things”. www.oracle.com. 2016年4月19日時点のオリジナルよりアーカイブ。2016年6月19日閲覧。
  11. ^ Why should I uninstall older versions of Java from my system?”. オラクル. 2016年9月9日閲覧。
  12. ^ a b Java Software | オラクル”. www.oracle.com. 2019年10月19日閲覧。
  13. ^ 広辞苑 第六版
  14. ^ JAVASOFT SHIPS JAVA 1.0”. sun.com. 2007年3月10日時点のオリジナルよりアーカイブ。2008年2月5日閲覧。
  15. ^ Chander, Sharat. “Introducing Java SE 11”. oracle.com. 2018年9月26日時点のオリジナルよりアーカイブ。2018年9月26日閲覧。
  16. ^ The Arrival of Java 15!”. Oracle (2020年9月15日). 2020年9月15日閲覧。
  17. ^ オラクル、Java 17をリリース”. Oracle (2021年9月17日). 2021年9月30日閲覧。
  18. ^ オラクル、Java 18を発表”. Oracle (2022年3月22日). 2022年3月23日閲覧。
  19. ^ オラクル、Java 19をリリース”. Oracle (2022年9月21日). 2022年9月21日閲覧。
  20. ^ オラクル、Java 20をリリース”. Oracle (2023年3月22日). 2022年3月23日閲覧。
  21. ^ オラクル、Java 21のリリースとサポート・ロードマップの延長を発表”. Oracle (2023年9月19日). 2023年9月21日閲覧。
  22. ^ オラクル、Java 22をリリース”. Oracle (2024年3月21日). 2024年3月23日閲覧。
  23. ^ Opening Up Java EE - An Update” (英語). オラクル (2017年9月12日). 2019年3月10日閲覧。
  24. ^ EE4J、EclipseファウンデーションがオープンソースJava EEを準備”. InfoQ (2017年11月16日). 2019年3月10日閲覧。
  25. ^ Java EE は Jakarta EE となる”. InfoQ (2018年3月5日). 2019年3月10日閲覧。
  26. ^ 星 暁雄=日経BP Javaプロジェクト (2003年10月31日). “EclipseとWebSphere Studioはどう違うのか | 日経 xTECH(クロステック)”. 日経 xTECH(クロステック). Nikkei Business Publications, Inc.. 2019年11月17日閲覧。
  27. ^ Sun Microsystems, Inc (2007年5月8日). “Sun Fulfills Promise of Open and Free Java Technology and Releases Java SE Platform to OpenJDK Community”. 2009年9月16日閲覧。
  28. ^ http://www.excelsior-usa.com/jet.html
  29. ^ オラクル Java SE 認定資格パス 概要”. 2019年3月7日閲覧。
  30. ^ オラクル Java EE and Web Services 認定資格パス 概要”. 2019年3月7日閲覧。
  31. ^ Java Foundations Certified Junior Associate (novice-level certification)”. 2019年3月10日閲覧。
  32. ^ 認定試験一覧”. 2019年3月7日閲覧。
  33. ^ Java資格が大幅リニューアル。Bronze/Silver/Goldが登場”. 2019年3月7日閲覧。






固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Java」の関連用語

Javaのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Javaのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのJava (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS