目次
93 関係: Apache Hadoop、実行時コンパイラ、並列計算、並行計算、並行性制御、世代別ガベージコレクション、三角関数、事前コンパイラ、仮想継承、仮想関数テーブル、仮想機械、例外処理、マルチコア、マーク・アンド・スイープ、バイトコード、ポインタ (プログラミング)、メモリマップトファイル、メソッド (計算機科学)、ループ展開、レジスタ (コンピュータ)、レジスタ割り付け、ロック (計算機科学)、ブロック (プログラミング)、プログラミング言語、ヒープ領域、フランス国立情報学自動制御研究所、フレームレート、ベンチマーク、アプリケーションプログラミングインタフェース、アプリケーションソフトウェア、インライン展開、ウィジェット (GUI)、ウィジェット・ツールキット、エスケープ解析、オラクル (企業)、オブジェクト (プログラミング)、ガベージコレクション、クラス (コンピュータ)、グラフ彩色、グリッド・コンピューティング、コンパイラ最適化、シマンテック、シェーダー、スレッド (コンピュータ)、サン・マイクロシステムズ、入出力、共通言語ランタイム、動的プログラミング言語、C Sharp、C++、... インデックスを展開 (43 もっと) »
- ソフトウェア最適化
- プラットフォーム (コンピューティング)
Apache Hadoop
Apache Hadoopは大規模データの分散処理を支えるオープンソースのソフトウェアフレームワークであり、Javaで書かれている。Hadoopはアプリケーションが数千ノードおよびペタバイト級のデータを処理することを可能としている。HadoopはGoogleのMapReduceおよびGoogle File System(GFS)論文に触発されたものである。 HadoopはApacheのトップレベルプロジェクトの1つであり、世界規模の開発貢献者コミュニティによって開発され、使用されている。 to the project and uses Hadoop extensively in its web search and advertising businesses.
実行時コンパイラ
実行時コンパイラ(じっこうじコンパイラ、、JITコンパイラ)とは、ソフトウェアの実行時にソースコードをコンパイルするコンパイラのこと。通常のコンパイラはコンパイルを実行前に事前に行い、これをJITと対比して事前コンパイラ (ahead-of-timeコンパイラ、AOTコンパイラ)と呼ぶ。
並列計算
並列計算(へいれつけいさん、parallel computing)は、コンピュータにおいて特定の処理をいくつかの独立した小さな処理に細分化し、複数の処理装置(プロセッサ)上でそれぞれの処理を同時に実行させることである。並列コンピューティングや並列処理ともいう。
見る Javaの性能と並列計算
並行計算
並行計算(へいこうけいさん、Concurrent computing)とは、複数の計算あるいはアルゴリズムを、同一期間に同時実行させつつ相互に同調(コンカレント)させて、次の期間開始までに互いに完遂させるという計算形態を意味している。非同期なメッセージパッシングではその完遂の抽象化も可能になる。対義語は順次計算(シーケンシャル)である。並行コンピューティングとも邦訳される。並行プログラミング(Concurrent programming)とも言われる。 並行計算は、コンピュータプログラムやコンピュータネットワークの重要な特性であり、各プロセスの各スレッド制御などがその要点になる。並行計算下の各スレッドは、一定の制約内で他のスレッドの完了を待つことなく同時にそれぞれ進行できる。非同期では他のスレッドの応答も一定の制約内で待たなくてよくなる。
見る Javaの性能と並行計算
並行性制御
情報技術および計算機科学における並行性制御(へいこうせいせいぎょ、Concurrency Control)または同時実行制御(どうじじっこうせいぎょ)とは、特にプログラミングとOSとマルチプロセッシングとデータベースにおいて、並行処理の結果が可能な限り素早くかつ正しく得られることを保証することである。 コンピュータシステムは、ソフトウェアもハードウェアも、モジュールまたはコンポーネントで構成される。各コンポーネントは何らかの一貫性規則に従って正しく動作するよう設計されている。コンポーネント間でメッセージをやり取りするか(記憶装置内で)データを共有して並行動作する際、あるコンポーネント間の一貫性が他のコンポーネントによって妨害されることがある。並行性制御の一般的な領域は、同時並行的に相互作用しながら動作するコンポーネント間の一貫性を保つための規則、技法、設計方法論、理論を提供し、結果としてシステム全体の一貫性と正確性を提供する。並行性制御をシステムに導入することは、一般に若干の性能低下を生じる操作上の制約を適用することを意味する。操作一貫性と正確性は、妥当な以上の性能低下を伴わずに可能な限り効率的に達成されるべきである。
世代別ガベージコレクション
世代別ガベージコレクション (generational garbage collection) はガベージコレクションの手法のひとつである。別名として、ジェネレーション・スキャベンジング (generation scavenging) とも呼ばれる。以下、ガベージコレクションをGCと省略する。
三角関数
三角関数(さんかくかんすう、trigonometric function)とは、平面三角法における、角度の大きさと線分の長さの関係を記述する関数の族、およびそれらを拡張して得られる関数の総称である。鋭角を扱う場合、三角関数の値は対応する直角三角形の二辺の長さの比(三角比)である。三角法に由来する三角関数という呼び名のほかに、単位円を用いた定義に由来する円関数(えんかんすう、circular function)という呼び名がある。 三角関数には以下の6つがある。なお、正弦、余弦、正接の3つのみを指して三角関数と呼ぶ場合もある。
見る Javaの性能と三角関数
事前コンパイラ
事前コンパイラ(Ahead-Of-Timeコンパイラ、AOTコンパイラ)とは、アプリケーション実行前に(事前に)ソースコードや中間表現(中間言語)を機械語へ変換(コンパイル)するコンパイラのこと。対義語は実行時コンパイラ(Just-In-Timeコンパイラ、JITコンパイラ)。
仮想継承
仮想継承(かそうけいしょう、Virtual inheritance)とは、C++プログラミング言語における継承の一種で、多重継承によって生じる問題(菱形継承問題)を解決するもの。どの上位クラスのメンバーを使うか曖昧さが生じる部分で、明確化する。仮想継承は、部分の合成という意味での継承よりも、継承が上位クラスへの制限を表している場合に使われる。多重継承の基底クラスは、virtual というキーワードで仮想継承であることを指定される。
見る Javaの性能と仮想継承
仮想関数テーブル
仮想関数テーブル(かそうかんすうテーブル、virtual method table)あるいはvtableは、プログラミング言語の実装において動的なポリモーフィズム、すなわち実行時のメソッドの束縛を実現するために用いられる機構である。 あるプログラムが、継承関係にある複数のクラス(データ型)を持っているとする。たとえばスーパークラス Cat と二つのサブクラス HouseCat と Lion において、クラス Cat が speak という仮想関数(仮想メソッド)を定義しており、サブクラスは適切な実装(鳴く、吠えるといった)を行うものとする。 プログラムがspeakメソッドをCatへのポインタp(Cat クラスおよび Cat の任意のサブクラスを指すことができる)に対して呼び出すと、実行環境は、pが指す実際のオブジェクトの種類(型)に応じてどの実装を呼び出すかを決定しなければならない。
仮想機械
仮想機械(かそうきかい、仮想マシン、バーチャルマシン、virtual machine、VM)とは、アプリの使用を最適化する方法であり、コンピュータの動作を再現するソフトウェアである。すなわち、エミュレートされた仮想のコンピュータそのものも仮想機械という。仮想機械によって、1つのコンピュータ上で複数のコンピュータやオペレーティングシステム (OS) を動作させたり、別のアーキテクチャ用のソフトウェアを動作させることができ、アプリケーションが互いに干渉するのを防げる。 仮想機械によるアプローチは、企業や個人がレガシーアプリケーションに対処し、1台のコンピュータで処理できるさまざまな種類のアプリケーションを最大化することで、ハードウェアの使用を最適化するための一般的な方法である。
見る Javaの性能と仮想機械
例外処理
例外処理(れいがいしょり、)とは、IT業界で用いられる専門用語で、ある抽象レベルにおけるシステムの設計で想定されておらず、ユーザー操作によって解決できない問題に対処するための処理である。例外処理の結果として問題が解決されないとシステム障害になる。システム停止やデータ破損の原因になり、ユーザーに損害を与える可能性があるため、システム開発で例外処理は重要視されている。 システムの設計で想定されておらず、継続不能や継続すると問題になる様な状態としては、次のようなものが挙げられる。
見る Javaの性能と例外処理
マルチコア
マルチコア (multiple core, multi-core) は、1つのプロセッサ・パッケージ内に複数のプロセッサ・コアを搭載する技術であり、マルチプロセッシングの一形態である。 外見的には1つのプロセッサでありながら論理的には複数のプロセッサとして認識されるため、同じコア数のマルチプロセッサと比較して実装面積としては省スペースであり、プロセッサコア間の通信を高速化することも可能である。主に並列処理を行わせる環境下では、プロセッサ・チップ全体での処理能力を上げ性能向上を果たすが、アムダールの法則による制約を受ける。このプロセッサ・パッケージ内のプロセッサ・コアが2つであればデュアルコア (dual-core)、3つであればトリプルコア (triple-core)、4つであればクアッドコア (quad-core)、6つであればヘキサコア (hexa-core)、8つは伝統的にインテルではオクタルコア (octal-core)、AMDではオクタコア (octa-core) と呼ばれるほか、オクトコア (octo-core) とも呼ばれる。さらに高性能な専用プロセッサの中には十個以上ものコアを持つものがあり、メニーコア (many-core) と呼ばれる。
マーク・アンド・スイープ
マーク・アンド・スイープ(mark-and-sweep)は、ガベージコレクションの実装方法およびガベージコレクタの動作方法の一つ。
バイトコード
バイトコード (bytecode) は、バイト指向の、中間表現のコードすなわち中間コードの総称である。バイトコードという名前は命令の構成がバイト指向であること、すなわち命令長がバイト可変長であったり、命令中のフィールドの区切りがビット単位でなくバイト単位になっているといったことから来ている。特にJavaの場合オペコードが1バイトである(Javaバイトコードの記事を参照)。しかし、仮想マシンの機械語をバイトコードと呼ぶことがJavaで広く一般的になったことから、前述のようなバイト指向でなくともバイトコードと呼んでいることも多い。バイト単位でなくビット単位の場合は、ビットコードとも呼ばれる。ワード指向のためにワードコードという語を使っている例も見られる。
ポインタ (プログラミング)
ポインタあるいはポインター(pointer)は、 コンピュータで処理するデータやプログラムの場所を記憶して指示するレジスタや変数の分類や呼称。 https://riscv.org/technical/specifications/ https://developer.arm.com/documentation/ddi0487/latest/ https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html"。
メモリマップトファイル
メモリマップトファイル()はファイルまたはそれに類似するリソース(あるいはその一部)を仮想記憶空間の連続領域に直接マッピングしたものである。そのリソースは通常物理的にディスク上に存在するファイルだが、デバイス、共有メモリオブジェクトなどオペレーティングシステムがファイル記述子で参照できるリソースなら何でもよい。ファイルとメモリ空間の対応付けにより、アプリケーションはそれを主記憶の一部として扱うことができる。
メソッド (計算機科学)
メソッド あるいは メンバー関数 (-かんすう) とはオブジェクト指向プログラミング言語において、あるクラスまたはオブジェクトに所属するサブルーチンを指す。
ループ展開
ループ展開(ループてんかい、)は、プログラムのサイズを犠牲に実行速度を最適化する(時間と空間のトレードオフ)、と呼ばれる手法の1つである。ループアンローリング()とも呼ぶ。プログラマが手動で行うこともあるし、コンパイラが行うこともある。 ループ展開の目的は、毎回の繰り返しごとに発生する「ループの終了」条件のテストを減少させる(もしくはなくす)事によって、実行速度を向上させることである。ループは、ループ自体を制御するためのオーバーヘッドがなくなるように、独立した命令ブロックの連続に書き換えることができる。
レジスタ (コンピュータ)
レジスタ(register)はコンピュータのプロセッサなどが内蔵する記憶回路で、制御装置や演算装置や実行ユニットに直結した、操作に要する速度が最速の、比較的少量のものを指す。
レジスタ割り付け
レジスタ割り付け(レジスタわりつけ、Register allocation)は、プログラム内の多数の変数を少数のCPUレジスタに多重化するコンパイラ最適化技法のひとつである。その目標は、プログラムの実行速度を最大化すべく、なるべく多くのオペランドをレジスタに保持するようにすることである。レジスタ割り付けは基本的なブロックについて行う場合(ローカルレジスタ割り付け)と関数やプロシージャ全体について行う場合(グローバルレジスタ割り付け)がある。レジスタ割り当てとも呼ぶ。 プログラムは、多数の様々なデータを処理することが多い。しかし、CPUの多くはデータを保持するのに使えるレジスタ数は限られている。
ロック (計算機科学)
計算機科学におけるロック (lock) とは、計算機システム内に複数の動作主体(プロセスやスレッドなど)のある環境で、データやデバイスなどの計算資源(リソース)へのアクセス制限を課す同期機構。ロックは並行性制御ポリシーを実施する手法のひとつである。アクセス制限を課す動作を「ロックする」、「ロックを取得する」などと表現する。また対義語として、制限を解除することをアンロック(unlock)という(ロック解放、ロック解除とも)。
ブロック (プログラミング)
ブロック (block) とは、プログラミング言語におけるコードのまとまり(コードブロック)のことである。 ブロック状のパーツを組み合わせてプログラミングを行うScratchなどの「ブロック」とは異なる。
プログラミング言語
プログラミング言語(プログラミングげんご、)とは、プログラムを記述するための人工言語。コンピュータプログラムを書くために考案された、正確に定義された記号と規則のしくみ。以前は、しばしばプログラム言語と表記された。
ヒープ領域
ヒープ領域(heap area, heap memory)はコンピュータープログラミングにおいて、動的に確保可能なメモリの領域。ヒープ (heap) とは、『山積み』という言葉の中の『山』をさす英単語である。 データ構造のヒープと直接的な関係があるかどうかは、ヒープ領域の構造の設計、保守にデータ構造のヒープの技術を使うかどうかに依る(あらゆるデータ構造とヒープ領域の関係について「直接的な関係があるかどうかは、ヒープ領域の構造の設計、保守にそのデータ構造の技術を使うかどうかに依る」ということが言えるので、データ構造のヒープについても、こう主張することが絶対的な間違いだとは言い切れない)。
フランス国立情報学自動制御研究所
INRIA(Institut National de Recherche en Informatique et en Automatique、 フランス国立情報学自動制御研究所)は、フランス政府研究省および、経済・財務省が共同管理するフランス国立研究所である。 1979年に、フランスの情報・制御分野の中心となる研究機関として設立された。 フランス国内に8ヶ所の研究施設(アキテーヌ、ブルターニュ、ロレーヌ、フランシュ=コンテ、イル=ド=フランス、ノール=パ・ド・カレー、コート・ダジュール、ラングドック=ルシヨン、ローヌ=アルプ)をもち、3000人以上の職員を抱える大規模な研究所である。
フレームレート
フレームレート (Frame rate)は、動画において、単位時間あたりに処理させるフレームすなわち「コマ」の数(静止画像数)を示す、頻度の数値である。通常、1秒あたりの数値で表し、fps(frames per second=フレーム毎秒)という単位で表す。 映像のサンプリング周波数ともいえ、表示装置(テレビ受像機・ビデオモニター・ディスプレイ等)のリフレッシュレート同様、単位にヘルツ (Hz)が使われる場合もある。ただし、リフレッシュレートと必ずしも同一の値を示すものではない(後述)。 連続しているものを対象とした標本化であることから、ヒトの視覚における残像効果・ストロボ効果に由来する、映像の質感や見た目に大きく関係する。値が大きくなるほど動きが滑らかに見える。
ベンチマーク
ベンチマーク()とは、本来は測量において利用する水準点を示す語で、転じて金融、資産運用や株式投資における指標銘柄など、試金石として比較のために用いる指標を意味する。また、広く社会の物事のシステムのあり方や規範としての水準や基準などを意味する。またベンチマーキングとは自社の課題解決のために、競合他社などの優れた経営手法(ベストプラクティス)を持つ企業を分析するプロセスを指す。
アプリケーションプログラミングインタフェース
アプリケーションプログラミングインタフェース(、)「インターフェイス」「インターフェース」と表記されることもあるが、本記事では「インタフェース」で統一する。とは、広義ではソフトウェアコンポーネント同士が互いに情報をやりとりするのに使用するインタフェースの仕様である。 APIには、サブルーチン、データ構造、オブジェクトクラス、変数などの仕様が含まれる。APIには様々な形態があり、POSIXのような国際標準規格、マイクロソフトのWindows APIのようなベンダーによる文書、プログラミング言語の標準ライブラリ(例えば、C++のStandard Template Libraryやなど)がある。 商業的に使われる狭義では、各種システムやサービス(ハードウェア、OS、ミドルウェアおよびWebサービス等)を利用するアプリケーションソフトウェア (Application) を開発・プログラミング (Programming) するためのインタフェース (Interface) である。こちらの意味では、システムやサービスから直接提供されないもの、例えば言語の標準ライブラリは含まない。
見る Javaの性能とアプリケーションプログラミングインタフェース
アプリケーションソフトウェア
アプリケーションソフトウェア(application software)あるいはアプリケーションソフト(最近は英語では極端に略すとapp(s)アップ)は、ある特定の機能や目的のために開発・使用されるソフトウェアIT用語辞典 e-words、「」の説明 - 2023年7月12日閲覧。で、コンピュータの操作自体のためのものではないもの。たとえば、ワープロソフト、表計算ソフト、イラスト作成(お絵かき)用ソフトウェア、写真加工用ソフトウェアなど。アプリケーションプログラム(応用プログラム)ともいい、コンピュータ・プログラムの一種である。 アプリケーションと(2番目の語を省略して)も呼ばれ。「アプリケーション」は「応用」という意味なので日本語では「応用ソフト」とも呼ぶ(が、最近は「応用ソフト」と呼ばれることは減った)。日本語ではアプリとも略される。「アプリ」という略称の用例は1980年代から存在する。
インライン展開
インライン展開(インラインてんかい、inline expansion または inlining)とは、コンパイラによる最適化手法の1つで、関数を呼び出す側に呼び出される関数のコードを展開し、関数への制御転送をしないようにする手法。これにより関数呼び出しに伴うオーバーヘッドを削減する。特に小さくて頻繁に呼ばれる関数では効果的であり、呼び出し側にそのコードを展開することで定数畳み込みなどのさらなる最適化を施せる可能性が生じる。問題点はバイナリコードが一般に肥大化する結果を招く点であり、参照の局所性を損なうほどだったり、リソースの限界を超えると性能がかえって悪化することになる。 関数型言語の世界では、インライン展開をβ変換とも呼び、関数型言語の理論的基盤となっているラムダ計算の用語としてよく使われる。
ウィジェット (GUI)
各種GUIウィジェット ボタン ラジオボタン チェックボックス スライダー テキストボックス ダイアログボックス ウィジェット(Widget)は、グラフィカルユーザインタフェース(GUI)を構成するインタフェース部品の総称である。コントロールとも。 ウィジェットの一例としてウィンドウやテキストボックスが挙げられる。ウィジェットは物理的な対応物との関連で分類されることもある。例えば、マウスカーソルでクリックされる仮想ボタンと、指で押す物理的なボタンといった対応である。 ウィジェットは、ウィジェット・ツールキットの形態でまとめて提供されることが多い。プログラマはウィジェットを組み合わせてGUIを構築する。
ウィジェット・ツールキット
ウィジェット・ツールキット (widget toolkit) あるいは GUIツールキット とは、グラフィカルユーザインタフェース (GUI) を構成する部品の集合である。通常、ライブラリやアプリケーションフレームワークの形式で実装される。分野によって、ウィジェットはコントロールあるいはコンポーネントとも呼ばれる。GUIを利用したデスクトップアプリケーションやモバイルアプリケーションといった、アプリケーションソフトウェアの作成に用いられる。 個々の部品についてはウィジェット (GUI)を参照されたい。
エスケープ解析
エスケープ解析(エスケープかいせき、英: Escape analysis)とは、コンパイラ最適化理論において、ポインタの動的なスコープを特定するための方法である。エスケープ解析は、ポインタ解析やシェープ解析と関連している。 サブルーチンにおいて変数やオブジェクトが割り当てられるとき、変数へのポインタが、別の実行スレッドや呼び出し元のルーチンに「エスケープ」してしまうことがある。サブルーチンがオブジェクトを割り当て、これに対するポインタを返却すると、オブジェクトはプログラム内の不定の場所からアクセスすることができる。ポインタがグローバル変数やその他のデータ構造に格納された場合にも、現在の処理からエスケープしたと考えることができる。
オラクル (企業)
オラクル()は、アメリカ合衆国カリフォルニア州創業、テキサス州に本拠を置く、民間法人や公的機関を対象とするビジネス用途に特化したソフトウェア会社である。日本法人は日本オラクル。 2007年には世界で第3位のソフトウェア会社となる。
オブジェクト (プログラミング)
コンピュータ科学の分野において、オブジェクト()は、変数、データ構造、関数、メソッドなど、識別子によって参照されるメモリ上の値を意味することがある。 オブジェクト指向プログラミングのパラダイムでは、オブジェクトは変数、関数、データ構造を組み合わせたものを意味することがある。特に、クラスベースのオブジェクト指向プログラミングのパラダイムでは、特に、クラスのインスタンスを指す。 データベース管理のリレーショナルモデルでは、オブジェクトはテーブルや列、データとデータベースエントリーの間の関係(たとえば、人物の年齢と特定の人物との関係など)などを指す場合がある。
ガベージコレクション
ガベージコレクション(garbage collection、GC)とは、コンピュータプログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能である。1959年ごろ、LISPにおける問題を解決するためジョン・マッカーシーによって発明された。 メモリの断片化を解消する機能はコンパクション(memory compaction)と呼ばれ、実現方法によってはガベージコレクションと共にコンパクションも行う仕組みになっている。そのためコンパクションを含めてガベージコレクションと呼ぶ場合もあるが、厳密には区別される。 また、ガベージコレクションを行う主体はガベージコレクタ(garbage collector)と呼ばれる。ガベージコレクタはタスクやスレッドとして実装される場合が多い。
クラス (コンピュータ)
オブジェクト指向プログラミングにおけるクラス(class)英語の class は、本来「分類」「種類」といった意味を持っている。は、オブジェクトを生成するための設計図あるいはひな形に相当するものである。抽象データ型の一つ。クラスから生成したオブジェクトの実体のことをインスタンスという。 クラスには、クラス自身またはクラスのインスタンスが保持するデータと、データに関連したオブジェクトの振る舞いを記述できる。プログラミング言語によっては、それぞれにを指定できる。統一モデリング言語 (UML) のクラス図では、データのことを「属性」、振る舞いのことを「操作」と呼ぶ。Javaなどでは、データのことを「フィールド」、振る舞いのことを「メソッド」と呼ぶ。
グラフ彩色
3色に頂点彩色(最適彩色)されたグラフ。ピーターセングラフの彩色数は3である。 グラフ彩色(グラフさいしょく、)とは、グラフの何らかの要素に、ある制約条件を満たすように色を割り当てることである。最も単純なものは、隣接する頂点同士が同じ色にならないように全頂点に彩色する問題である。これを頂点彩色(ちょうてんさいしょく)という。同様に辺彩色(へんさいしょく)は、隣接する辺同士が同じ色にならないように全辺を彩色する問題、面彩色(めんさいしょく)は、平面グラフの辺で囲まれた各領域(面)を隣接する面同士が同じ色にならないように彩色する問題である。
グリッド・コンピューティング
グリッド・コンピューティングは、インターネットなどの広域のネットワーク上にある計算資源(CPUなどの計算能力や、ハードディスクなどの情報格納領域)を結びつけ、ひとつの複合したコンピュータシステムとしてサービスを提供する仕組みである。提供されるサービスは主に計算処理とデータの保存・利用に大別される。一箇所の計算センターや、一組のスーパーコンピュータでは足りないほどの大規模な計算処理や大量のデータを保存・利用するための手段として開発されている。
コンパイラ最適化
コンパイラ最適化(コンパイラさいてきか、Compiler optimization)では、コンピュータ・プログラムの最適化に関する話題のうち、もっぱらコンパイラに関係するものに関して説明する。最も一般的な要求はプログラムの実行時間を最小化することであり、その次に使用するメモリ量を最小化することである。また、携帯可能なコンピュータが増えるにつれて、消費電力を最小化するという最適化も生まれてきた。 一部のコード最適化問題はNP完全問題であることが示されている。実際には、プログラマがコンパイラによる最適化の完了を待てる時間の上限なども考慮してコンパイラ最適化を実装する(最適化はCPU時間とメモリを多大に使用する)。かつては、コンピュータのメモリ実装量も実行できる最適化を制限する要因だった。
シマンテック
シマンテック (Symantec) は、AIカンパニーとしてスタート。2022年で設立されてから40年になるエンドポイント製品の老舗ブランド。 現在は半導体などの製造販売を行うブロードコム社が買収し、ソフトウェア事業の一部として製品開発がおこなわれている。法人向けエンドポイントセキュリティのSEPの愛称で認知されているSymantec Endpoint Protectionに加え、EDRやモバイル対応がなされたSymantec Endpoint Securityを販売している。旧シマンテックはノートンライフロックを経てジェン・デジタルに社名を変更し、個人向けセキュリティ製品のノートンを販売している。現在のシマンテックは「ブロードコムのセキュリティ事業のブランド名」である。
シェーダー
シェーダー(shader)とは、3次元コンピュータグラフィックスにおいて、シェーディング(陰影処理)を行うコンピュータプログラムのこと。「shade」とは「次第に変化させる」「陰影・グラデーションを付ける」という意味で、「shader」は頂点色やピクセル色などを次々に変化させるもの(より具体的に、狭義の意味で言えば関数)を意味する。
スレッド (コンピュータ)
スレッド(thread)とは、コンピュータプログラムにおいて特定の処理を行うための一貫性のある命令の流れのことであり、プロセッサ利用の最小単位。プロセスは少なくとも1つ以上のスレッドを含む。一般的に各プロセスには独立した仮想アドレス空間が割り当てられるが、プロセス内のスレッド群はアドレス空間を共有する。そのためプログラムを実行するときのコンテキスト情報が最小で済み、同じプロセス内でスレッドを切り替える際はアドレス空間の切り替えが不要となるので、切り替えが高速になる。スレッドは、thread of execution(実行の脈絡)という言葉を省略したものである。複数のスレッドを生成して個々に処理を割り当てて実行させることで、並行処理による応答性の向上などを実現でき、さらにマルチコアプロセッサを複数のスレッドによって活用することで、並列処理による実行時間の短縮などを実現できる(これらの手法をマルチスレッドプログラミングと呼ぶ)。
サン・マイクロシステムズ
サン・マイクロシステムズ(Sun Microsystems)は、アメリカ合衆国カリフォルニア州サンタクララに本社を置いていたコンピュータの製造・ソフトウェア開発・ITサービス企業である。2010年1月27日にオラクルにより吸収合併され、独立企業・法人としては消滅した。
入出力
入出力(にゅうしゅつりょく、input/output)は、データなどの「ものごと」の流れにおける出入りのことで、入力と出力の2つを総称した概念のことである。input/outputの頭文字をとってと略されることがある。
見る Javaの性能と入出力
共通言語ランタイム
CLRの動作イメージ。バイトコードを機械語に変換、実行する。 共通言語ランタイム (Common Language Runtime, CLR) とは、.NET Frameworkアプリケーションを実行するための仮想機械で、共通言語基盤 (CLI) のマイクロソフト自身による実装。.NET Framework 1.x - 4.x で使用されている CLR は Windows 上のみで動作する。.NET CoreはMITライセンスのオープンソースになり、CoreCLRはWindows、macOS、Linux、FreeBSD で動作する。.NET 5以降は.NET Runtimeと呼ばれるようになり、.NET 6では実行環境としてAndroidやiOSのサポートも加わった。
動的プログラミング言語
動的プログラミング言語(どうてきプログラミングげんご、dynamic programming language)は、コンピュータ・プログラミング言語において、一般にコンパイルなどの準備段階に済まされることが多いことを、準備時ではなく実行時に行うプログラミング言語処理系(の言語)である。本来は実装(処理系)のことを指すべきであるが、一般にその言語を指して議論されることが多い。もっぱら高水準言語が多い。動的言語(dynamic language)とも。例えば、型システムによる型チェックや、値の型変換、名前束縛などを、コンパイルなどの実行準備時ではなく実行時に行う。そういった「動的さ」により、コードの追加やオブジェクトや定義の拡張や型システムの変更によるプログラムの拡張、といったことが行いやすい、ということが利点とされる。これらの動作は静的な処理系でも手間はかかるがエミュレート可能である(例えばJavaのJDK/JREでも、クラスローダーを活用すれば可能である)。一方、動的言語ではそういったことが、直接的にサポートされる。
C Sharp
C#(シーシャープ)は、マイクロソフトが開発した、汎用のマルチパラダイムプログラミング言語である。C#は、Javaに似た構文を持ち、C++に比べて扱いやすく、プログラムの記述量も少なくて済む。また、C#は、Windowsの.NET Framework上で動作することを前提として開発された言語であるが、2023年現在はクロスプラットフォームな.NETランタイム上で動作する。 デスクトップ・モバイルを含むアプリケーション開発や、ASP.NETをはじめとするWebサービスの開発フレームワーク、ゲームエンジンのUnityでの採用事例などもある。 マルチパラダイムをサポートする汎用高レベルプログラミング言語で、静的型付け、タイプセーフ、スコープ、命令型、宣言型、関数型、汎用型、オブジェクト指向(クラスベース)、コンポーネント指向のプログラミング分野を含んでいる。
C++
C++(シープラスプラス)は、汎用プログラミング言語のひとつである。派生元であるC言語の機能や特徴を継承しつつ、表現力と効率性の向上のために、手続き型プログラミング・データ抽象・オブジェクト指向プログラミング・ジェネリックプログラミングといった複数のプログラミングパラダイムが組み合わされている。C言語のようにハードウェアを直接扱うような下位層向けの低水準言語としても、複雑なアプリケーションソフトウェアを開発するための上位層向け高水準言語としても使用可能である。アセンブリ言語以外の低水準言語を必要としないこと、使わない機能に時間的・空間的コストを必要としないことが、言語設計の重要な原則となっている。
見る Javaの性能とC++
C言語
C言語(シーげんご、C programming language)は、1972年にAT&Tベル研究所のデニス・リッチーが主体となって開発した汎用プログラミング言語である。英語圏では「C language」または単に「C」と呼ばれることが多い。日本でも文書や文脈によっては同様に「C」と呼ぶことがある。制御構文などに高水準言語の特徴を持ちながら、ハードウェア寄りの記述も可能な低水準言語の特徴も併せ持つ。基幹系システムや、動作環境の資源制約が厳しい、あるいは実行速度性能が要求されるソフトウェアの開発に用いられることが多い。後発のC++やJava、C#など、「C系」と呼ばれる派生言語の始祖でもある。 ANSI、ISO、またJISにより言語仕様が標準規格化されている。
見る Javaの性能とC言語
CPU設計
CPU設計の記事では、コンピュータのプロセッサの設計(デザイン)について解説する。
継承 (プログラミング)
コンピュータプログラミングにおける継承(けいしょう、inheritance)とは、任意のオブジェクトの特性を、他のオブジェクトの特性の基礎にするためのメカニズムと定義されている。 基礎にされる継承元は親、その継承先は子と呼ばれて、状態と機能と定数と注釈などが引き継がれるが、コンストラクタとデストラクタは対象外になる。その親と子の関係を、クラスベースOOPはスーパークラスとサブクラスの関係で、プロトタイプベースOOPはプロトタイプとクローンの関係で導入している。
Direct3D
Direct3Dは、3Dグラフィックスを描画するためのAPIである。マイクロソフトが提供するマルチメディアAPIセットDirectXの一部であり、様々なWindows(主にWindows 95以上)で動作し、さらに、家庭用ゲーム機であるXboxシリーズ(初代Xbox、Xbox 360、Xbox One、Xbox Series X/S)のグラフィックスAPIのベースでもある。略称としてD3Dがよく使われる。
Dr. Dobb's Journal
Dr. Dobb's Journal (DDJ、ドクター・ドブズ・ジャーナル) は、米国でCMP Technology社が刊行していた月刊誌である。DDJ の話題はコンピュータプログラマを対象としており、マイクロコンピュータのハードウェアではなくソフトウェアに焦点を当てた最初の定期刊行物であった。現在ではInformationWeek誌の連載Dr.
計算機科学
計算機科学(けいさんきかがく、computer science、コンピューター・サイエンス)またはコンピュータ科学、CSとは、情報と計算の理論的基礎、およびそのコンピュータ上への実装と応用に関する研究分野である。コンピュータサイエンス(computer science)は「情報科学」や「情報工学」とも和訳される。コンピュータ科学には様々な分野がある。コンピュータグラフィックスのように応用に力点がある領域もあれば、理論計算機科学と呼ばれる分野のように数学的な性格が強い分野もある。計算科学は科学技術計算という「計算需要」に応えるための分野であり、それを実現する手段の研究は高性能計算である。また、一見わかりやすい分類として、計算機工学など「ハードウェア」と、プログラミングなど「ソフトウェア」という分類があるが、再構成可能コンピューティングのようにその両方といえる分野があるなど、単純に分類ができるようなものではない。
高性能計算
高性能計算、ハイ・パフォーマンス・コンピューティング(high-performance computing、HPC)は、計算科学のために必要な数理からコンピュータシステム技術までに及ぶ総合的な学問分野である数値線形代数の数理とHPC, 櫻井鉄也, 松尾宇泰, 片桐孝洋編(シリーズ応用数理 / 日本応用数理学会監修, 第6巻)共立出版, 2018.8The Art of High Performance Computing for Computational Science, Vol.
関数へのポインタ
関数へのポインタ (かんすうへのポインタ、pointer to function) あるいは関数ポインタ (かんすうポインタ、function pointer) は、C言語, C++, D言語やその他多くのプログラミング言語におけるポインタの一種である。関数へのポインタをデリファレンス (dereference) すれば、そのポインタが指し示す関数(サブルーチン)を呼び出せる。応用例としては、switch文を置き換えるテーブルジャンプを実装する、コールバック関数によるカスタマイズポイントを提供する、などといったものがある。 関数オブジェクト (function object) は、関数へのポインタに似ているが、コード領域中のエントリポイントを指す単なるポインタである関数へのポインタと違い、データ領域上に実体を持つオブジェクトであるという点が異なっている(実装の詳細は言語や処理系により異なるが)。そのため、関数オブジェクトはデータを保持でき、クロージャを再現することもできる。ゆえに、関数オブジェクトは、「関数へのポインタ」ではなく「関数」という型と値を持つようなものと言え、より強力である。
配列
この記事では、コンピュータ・プログラムにおいて配列(はいれつ、array)と呼ばれているデータ構造およびデータ型について説明する。計算科学方面ではベクトルという場合もある。また、リストも参照。一般に、添え字で個々の要素を区別する。
見る Javaの性能と配列
Fortran
1956年に発行された最初のFortran解説書『The Fortran Automatic Coding System for the IBM 704』 Fortran(フォートラン)は科学技術計算に向いた手続き型プログラミング言語。1954年にIBMのジョン・バッカスが考案したコンピュータ用で世界最初の高水準言語であり、その後も改訂されて使用されている。
GNU General Public License
GNU一般公衆ライセンス(GNU General Public License、GNU GPLまたは、単にGPL) とは、GNUプロジェクトのためにリチャード・ストールマンにより作成されたフリーソフトウェアライセンスである。八田真行の日本語訳ではGNU 一般公衆利用許諾書と呼んでいる。現在、GNU公式サイト日本語ページではGNU一般公衆ライセンスと表記されている。
見る Javaの性能とGNU General Public License
Graphics Processing Unit
Graphics Processing Unit(グラフィックス プロセッシング ユニット、略してGPU)は、コンピュータゲームに代表されるリアルタイム画像処理に特化した演算装置あるいはプロセッサである。グラフィックコントローラなどと呼ばれる、コンピュータが画面に表示する映像を描画するための処理を行うICから発展した。特にリアルタイム3DCGなどに必要な、定形かつ大量の演算を並列にパイプライン処理するグラフィックスパイプライン性能を重視している。現在の高機能GPUは高速のビデオメモリ(VRAM)と接続され、頂点処理およびピクセル処理などの座標変換やグラフィックス陰影計算(シェーディング)に特化したプログラム可能な演算器(プログラマブルシェーダーユニット)を多数搭載している。
見る Javaの性能とGraphics Processing Unit
HotSpot
HotSpot(ホットスポット)はオラクル(旧サン・マイクロシステムズ)が提供しているJava仮想マシンで使われている高速化のための技術の名称。デスクトップ向け・サーバ向け・組み込み環境向け (Java ME) がある。性能を改善するためにジャストインタイムコンパイル方式、適応的最適化 (adaptive optimization) などの技術を使っている。
IBM
IBM(アイビーエム、正式名: International Business Machines Corporation)は、アメリカ合衆国ニューヨーク州アーモンクに本社を置くテクノロジー関連企業。世界170か国以上で事業を展開する典型的な多国籍企業であり、世界最大手規模のIT企業。IBMの愛称はビッグブルー、IBM社員の愛称はIBMer。行動指針は、「お客様の成功に全力を尽くす」「私たち、そして世界に価値あるイノベーション」「あらゆる関係における信頼と一人ひとりの責任」。社員への教育理念は、「教育に飽和点はない」。社員の文化として、何ものにもとらわれず「野鴨」、「'''THINK'''」などがあり、これらは創業時から100年以上続いている。
見る Javaの性能とIBM
Intel 8087
Intel 8087は、インテルの16ビットCPU、i8086およびi8088のために用意されていた数値演算コプロセッサ。インテル製としては初の数値演算コプロセッサである。8087を装着することによって、プログラムの処理内容にもよるが、20% - 500%の性能改善が期待できた。 8086は数値演算に関して、整数演算命令しか備えていないため、8086だけで浮動小数点演算を行うには別途ライブラリを用意する必要があった。8087を8086の搭載されたコンピュータに装着すると、IEEE 754形式の浮動小数点計算の命令をあたかもひとつのCPUで実行しているかのように使うことができるようになる。8087は8086と共通のバスに接続され、8086の実行する命令を常時監視する。8086では無効命令 (ESC) となる浮動小数点計算の命令を検出すると、8086側で発生する適切なアドレスモードにより追加OPコードおよびオペランドを自身内部にロードし、浮動小数点命令を処理する。8087によって新たに利用できる命令はFADD(加算命令)やFMUL(乗算命令)など68個。8087は8086が命令実行中でも独立して動作することができるが、8087の命令実行が完了してから次の命令を実行させないと誤動作する。それを回避するため8086には、8087の命令実行完了を待つWAIT命令がある。既出のFADDやFMULなどの前にはWAIT命令が必要となる。
Internet Explorer
Internet Explorer(インターネット エクスプローラー)は、マイクロソフトがかつて開発していたウェブブラウザである。以前の名称はMicrosoft Internet ExplorerやWindows Internet Explorerであった。一般的に、IEやMSIEと呼ばれる。 Windows 95からWindows 10に至るまでのWindows ファミリーに標準で含まれている。Windows Mobile(Windows CEの一部構成を含む)にはInternet Explorer Mobileが含まれていた。以前はMac用のInternet Explorer for Mac(IE:mac)や HP-UXとSolaris用のも存在したが、これらは現在サポートされていない。
JAR (ファイルフォーマット)
JAR(ジャー)またはJava Archive(ジャバ アーカイブ)とは、コンパイルされた複数のJavaバイトコードおよびそれが使用する画像などのリソースを一つにまとめZIP形式で圧縮されたファイル、およびそれを出力するツールのこと。圧縮されたファイルの拡張子には、「.jar」が使われる。 これによりJavaアプリケーション、Javaアプレット、ライブラリの配布が容易になる。アプレットにおいては、複数のJavaクラスファイルを一つにまとめ圧縮することで、全体のファイルの大きさを小さくするだけでなくHTTPコネクションの数を減らせるので、ウェブサーバの負荷が減り、アプレットの起動速度が向上する。
Java
Java(ジャバ、ジャヴァ)は、汎用プログラミング言語とソフトウェアプラットフォームの双方を指している総称ブランドである。オラクルおよびその関連会社の登録商標である。1996年にサン・マイクロシステムズによって市場リリースされ、2010年に同社がオラクルに吸収合併された事によりJavaの版権もそちらに移行した。 プログラミング言語Javaは、C++に類似の構文、クラスベースのオブジェクト指向、マルチスレッド、ガベージコレクション、コンポーネントベース、分散コンピューティングといった特徴を持ち、平易性重視のプログラム書式による堅牢性と、仮想マシン上での実行によるセキュリティ性およびプラットフォーム非依存性が理念とされている。
見る Javaの性能とJava
Java 2D
Java 2D は、Javaにおいて2次元コンピュータグラフィックスの描画に使われるAPIである。Java 2D の描画操作は、図形を描き、それを塗りつぶし、ディスプレイ上でその結果を合成するものと言える。
Java Native Interface
Java Native Interface (JNI) は、Javaプラットフォームにおいて、Javaで記述されたプログラムと、他のプログラミング言語(たとえばCやC++など)で書かれた、実際のCPU上で動作するコード(ネイティブコード)とを連携するためのインタフェース仕様である。Java言語からネイティブコードを利用するためのABIと、逆にネイティブコードからJavaバイトコードを動作させるためにバーチャルマシン (VM) を利用するためのAPIの2つから成る。 JNIを使うことで、Java言語のVMで動作させるには処理速度の面で不利とされる計算量の多いプログラムを部分的にネイティブコードに置き換えて高速化したり、標準Javaクラスライブラリからはアクセスできないオペレーティングシステムあるいはハードウェアの機能を利用するプログラムを、あたかも通常のJavaクラスのメソッドのように呼び出したりできるようになる。逆に、Javaクラスライブラリによって実装されている高水準の機能を、C/C++などで書かれた下位層から利用することもできるようになる。JNIはJava言語以外のJava VM上で動作する言語 (AltJava) からも利用可能である。
見る Javaの性能とJava Native Interface
Java OpenGL
Java OpenGL (JOGL) はJavaプラットフォーム上でOpenGLを使った3DCGソフトウェアを作成するための、オープンソースライブラリである。 JOGLではC言語で使えるOpenGLのほぼ全ての機能をJNIによりJavaで直接使えるようにしている。JNIのソースコードは同開発元のライブラリによって自動的に生成されていて、C言語と大差ない感覚で使えるが、Java 3DなどのJavaライブラリほどローレベルなAPIを隠さず、オブジェクト指向に沿った構造ではない。そのため、低オーバヘッドによる高速な実行が期待できるほか、C言語のコードをほぼそのままJavaへ移行できるが、代わりにソースコードは単調で長くなる傾向にある。
Java Platform, Micro Edition
Java Platform, Micro Edition (Java ME) は携帯電話、PDA、テレビのようなリソースが制限されたデバイスにおけるJavaの小型セット。JSR 68 で規定されている。当初は、Java 2 Platform, Micro Edition (J2ME) という名称だった。
見る Javaの性能とJava Platform, Micro Edition
Javaに対する批判
Javaに対する批判(ジャバにたいするひはん)では、プログラミング言語Javaと、その主たる実装であるJDKやその他の実装に関する批判、およびJavaプラットフォームの性能に対する批判について説明する。Javaプラットフォームの性能に関する、批判以外の内容については「Javaの性能」を参照のこと。 Javaは優れた技術だと評価する人々がいる一方で批判も少なくない。Javaはソフトウェアに関する複雑さを管理する問題に対して革新的な方法を提供するという目標のもとで開発された(ないし、そのように信じられている)。多くの人々は、Java技術はこの期待に対して満足できる答えを提供したと評価している。 しかしJavaにも欠点が無いわけではないし、どのようなプログラミング作法にも適応しているというわけでもない。また、どのような環境や要件にも普遍的に適応しているというわけでもない。
Java仮想マシン
ネイティブコードに変換されて実行される。Java APIとJVMの両者でJava実行環境(JRE)を構成する。 Java仮想マシン(ジャバかそうマシン、、Java VM、JVM)は、Javaバイトコードとして定義された命令セットを実行するスタック型の仮想マシン。APIやいくつかのツールとセットでJava実行環境(JRE)としてリリースされている。この環境を移植することで、さまざまな環境でJavaのプログラムを実行することができる。
Javaバイトコード
Javaバイトコードは、Java仮想マシンが実行する命令形式である。各バイトコードのオペコードは長さが1バイトであるが、引数を持つものもあるため、結果として複数バイトの命令となる。256個のオペコードの全てが使われているのではなく、51個が将来のために予約されている。その他について、Javaプラットフォームの開発元であるサン・マイクロシステムズは、3つのコードを永久に実装しないままにした。
Javaプラットフォーム
Javaプラットフォーム(ジャバプラットフォーム、英: Java Platform)は、Javaで記述されたプログラムの開発および実行を行うことのできるソフトウェア群の総称である。
Javaアプレット
Javaアプレット(Java Applet)は、ネットワークを通してWebブラウザに読み込まれ実行されるJavaのアプリケーションの一形態。Java 10まではJava Runtime Environmentに搭載されていて、Java 9より非推奨になり、Java 11で廃止。
Microsoft Visual C++
Visual C++ (マイクロソフト ビジュアル シープラスプラス;マイクロソフト ヴィジュアル シープラスプラス)とはマイクロソフト製のC、C++、C++/CLI用統合開発環境 (IDE) であり、コンパイラやデバッガを含む。通称VCあるいはVC++、MSVCなど。前身はMicrosoft C/C++などがある。
見る Javaの性能とMicrosoft Visual C++
Microsoft Windows
Microsoft Windows(マイクロソフト ウィンドウズ)は、マイクロソフトが開発・販売するオペレーティングシステム (OS) の製品群である。グラフィカルユーザインタフェース (GUI) を採用している。Windows発売以前では高価なワークステーション(ハイエンドパソコンを上回る性能のデスクトップコンピュータ)でしか実現されていなかったマルチタスクやGUIを中心とした使い勝手の良さを、一般消費者が入手しやすい標準的な規格のパソコンに順次取り込んで行き、一般向けOSのシェアのほとんどを占めるに至り、今や大きな知名度を持つ。
Perl
Perl(パール)とは、ラリー・ウォールによって開発されたプログラミング言語である。実用性と多様性を重視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング言語の優れた機能を取り入れている。ウェブ・アプリケーション、システム管理、テキスト処理など、さまざまなプログラムの開発に広く利用されている。 言語処理系としてのperlはフリーソフトウェアである。Artistic LicenseおよびGPLのもとで配布されており、誰でもどちらかのライセンスを選択して利用することができる。UNIX、Windows、macOSやLinuxのようなUNIX互換OSなど多くのプラットフォーム上で動作する。
見る Javaの性能とPerl
PHP (プログラミング言語)
PHP(ピー・エイチ・ピー)は、 "The PHP Group" によってコミュニティベースで開発されているオープンソースの汎用プログラミング言語およびその公式の処理系であり、特にサーバーサイドで動的なウェブページを作成するための機能を多く備えていることを特徴とする。 名称の PHP は再帰的頭字語として、 "PHP: Hypertext Preprocessor" を意味するとされており、「PHPはHTMLのプリプロセッサである」とPHP自身を再帰的に説明している。
Psyco
Psyco は Python 向けの特化コンパイラ/JIT コンパイラ であり Armin Rigo によって開発された。Psyco は I/O 依存のアプリケーションの速度をそれほど向上させることはないが、CPU 依存のアプリケーションの速度を著しく高速化させる。実際の高速化の幅は大きくアプリケーションに依存し、わずかに速度が低下する場合(きわめて稀だが)から 40 倍に高速すること(こちらも稀である)まで様々である。.
Python
Python(パイソン)はインタープリタ型の高水準汎用プログラミング言語である。
Ruby
Ruby(ルビー)は、まつもとゆきひろ(通称: Matz)により開発された、簡潔な文法が特徴的なオブジェクト指向スクリプト言語。 日本で開発されたプログラミング言語としては初めて国際電気標準会議(IEC)で国際規格に認証された事例となった。
見る Javaの性能とRuby
Standard Widget Toolkit
Standard Widget Toolkit(SWT)は、Javaプラットフォーム用ウィジェット・ツールキットの一種。元々、IBMが開発したが、現在はEclipse FoundationがEclipseと共に管理保守している。サン・マイクロシステムズがJava標準の一環として提供するJava用GUIツールキットであるAWTとSwingを代替するものとして開発された。 SWTはJavaで書かれている。GUI部品を表示するため、SWTはそのオペレーティングシステム (OS) が提供するGUIライブラリを JNI (Java Native Interface) 経由で使用する(これはシステム固有のAPIを使う一般的手法である)。SWTを使うプログラムは移植性があるが、ツールキット自体の実装はJavaでかかれているにもかかわらず、各プラットフォーム固有である。
見る Javaの性能とStandard Widget Toolkit
Swing
Swingの部品を使用したウィンドウの例 Swingは、プログラミング言語 Java のGUIツールキットである。Oracle社のJava Foundation Classesの一部であり、同じくJavaの GUI ツールキットである AWT を拡張したもの。Javaプログラムにグラフィカルユーザインタフェース(GUI)を提供するAPIである。 Swingは、先行するAWTよりも洗練されたGUIコンポーネントを提供するために開発された。Swingは、幾つかのプラットフォームのルック・アンド・フィールをエミュレートしたネイティブなルック・アンド・フィールを提供する。また、「プラグイン可能なルック・アンド・フィール」(Pluggable look and feel)をサポートしていることにより、アプリケーションは簡単にルック・アンド・フィールを切り替えることができ、下で走っているプラットフォームとは関係ないルック・アンド・フィールを使うこともできる。SwingはAWTよりも強力で柔軟なコンポーネントを持つ。ボタン、チェックボックス、ラベルといった馴染み深いコンポーネントの他にも、Swingはタブ付きパネル、スクロール窓、スライダー、スピナ、ツリー表示、表、リストなどの高度なコンポーネントを提供している。
System i
AS/400 i5 モデル570(2006年) AS/400(えーえすよんひゃく)、iSeries(あいしりーず)、System i(しすてむあい)はIBMのビジネス・アプリケーション用サーバー。世界的にはミッドレンジコンピュータ、日本ではオフィスコンピュータと分類される場合が多い。
Write once, run anywhere
(WORA、)または (WORE) とは、Javaのプログラムがオペレーティングシステム (OS) などのプラットフォームに依存しないという意味の、サン・マイクロシステムズのJavaのスローガンである。
見る Javaの性能とWrite once, run anywhere
X86
x86(エックスはちろく)は、Intel 8086およびその命令セットアーキテクチャ、およびそれと互換性を備えた命令セットを持つマイクロプロセッサ群の総称である。広義にはインテル以外のメーカー(AMDなど)の互換プロセッサを、さらに広義にはx86と互換性を保ちつつAMDによって64ビットに拡張され、それにインテルが追随し世に普及したx64(x86-64)アーキテクチャも含む。 初期は純粋なスカラープロセッサであったが、1997年にマルチメディア等のデータ処理のためにベクトル計算の機能を取り込んだ以降はハイブリッドなプロセッサとして進化を続けているSIMD命令としては1997年に初めてMMXが追加され、以降もSSEやAVXなどといったより強力な命令が追加されている。
見る Javaの性能とX86
機械語
機械語(きかいご、machine language、machine code 『日本大百科全書』【機械語】 (コトバンクにも転載されている)IT用語辞典 e-words【機械語】、 binary machine languageあるいはbinary machine code)は、コンピュータの中央処理装置(CPU)が直接理解し実行することができる命令からなる言語。マシン語(マシンご)とも。
見る Javaの性能と機械語
最適化 (情報工学)
コンピュータ関連において最適化(Optimization)という語は、最適化問題のそれを指すことも多いが、ここでは、コンパイラ最適化などに似た話題について説明する(「情報工学」と記事名には付いているが、全く information engineering の話題ではない)。コンピュータシステムは、主としてコストパフォーマンス上の理由から、効率的に(efficiently)動作することが望ましいことが多い。例えば、コンパイラ最適化は、高速化のためだったり、メモリの使用量を削減するためだったり、電力消費を抑えるためだったりする。最適化の対象となるシステムは、1つのプログラムの場合もあるし、複数のコンピュータの場合もあるし、インターネットのようなネットワーク全体の場合もある。
性能解析
ソフトウェア工学における性能解析(せいのうかいせき)または性能分析(せいのうぶんせき)(performance analysis)とは、動的プログラム解析の一種であり、プログラムの実行を通して情報を収集することでプログラムの性能を解析することを言う。逆にプログラムを実行せずに行う解析を静的コード解析と呼ぶ。性能解析の目的は、実行時間やメモリ使用量を最適化するためにプログラムのどの部分を改良すべきかを決定することである(ボトルネック、アムダールの法則参照)。
見る Javaの性能と性能解析
2008年
この項目では国際的な視点に基づいた2008年について記載する。
参考情報
ソフトウェア最適化
- Flyweight パターン
- Javaの性能
- インライン関数
- コピーオンライト
- ソフトウェアパフォーマンステスト
- トレーシング実行時コンパイル
- メモリー・フットプリント
- メモ化
- ルックアップテーブル
- 参照の局所性
- 性能解析
- 時間と空間のトレードオフ
- 最適化 (情報工学)
プラットフォーム (コンピューティング)
- Adobe Flash
- Adobe Shockwave
- Advanced Comprehensive Operating System
- Android (オペレーティングシステム)
- Azure Sphere
- BTRON
- BlackBerry Tablet OS
- CBL-Mariner
- ClickOnce
- FreeBSD
- Future Systems プロジェクト
- Google Wave
- GrapheneOS
- IBM S/390
- Jakarta EE
- Java Platform, Micro Edition
- Java Platform, Standard Edition
- Javaの性能
- Javaプラットフォーム
- KDE Frameworks
- KDELibs
- Linux
- Lucidchart
- MINIX 3
- Microsoft Windows
- Moorestown
- Plan 9 from Bell Labs
- QNX
- Research Unix
- SONiC (オペレーティングシステム)
- Sigar
- System/360
- System/370
- Windows 9x系
- Wine
- Wintel
- Xinu
- クロスプラットフォーム
- シェアードソース共通言語基盤
- プラットフォーム (コンピューティング)
- ランタイムシステム
- 実行モデル

