Javaの成功とそのコンセプトwrite once, run anywhereは、2002年に現れて以来、.NET Frameworkプラットフォームなど他の類似する取り組みを導き、それらはJavaの成功側面の多くを受けいれた。しかしながら、.NETの完全な実装はMicrosoft Windowsのみに向けたものしか存在しない。一方、Javaは多くのプラットフォームで完全にサポートされている。しかし.NETは、多くの異なるプログラミング言語を共通中間言語へとコンパイルする言語非依存ライブラリのユーザビリティに強い主眼点を置いている。.NETは言語非依存互換性の面ではJavaよりも成功している。しかし、JavaにもScala、Jython、Groovy、JRubyなどJavaVMを実行プラットフォームとする言語処理系が複数存在する。.NETにもVisual J#というJavaの実装が存在するが、これは本家のJavaとは非互換で、関連するクラスライブラリは殆ど言語バージョンが古いJDK 1.1に基づいている。これらは、Visual J#が.NETにおける主要な言語として設計されたのではなく、Javaから.NETプラットフォームへ移行するために用意された言語であることに起因する。その一方で、近年ではオープンソースコミュニティによってIKVM.NETという共通言語ランタイム上で動作するJava仮想マシンが登場し、一方的ではあるが、互換性及び相互利用性は急激に向上している。
Javaという言葉そのものは、通常、Javaプラットフォームで設計されたJavaプログラミング言語を指す。プログラミング言語は一般的に「プラットフォーム」というフレーズの範囲外にあるにもかかわらず、Javaプログラミング言語はJavaプラットフォームの中心部品であると考えられている。Javaの言語と実行はそれゆえ、通例一単位と考えられている。それでもやはり、サードパーティーはJavaプラットフォームを対象にしたかなり多くのコンパイラやインタプリタを生み出している。それらのうちいくつかは既存の言語として、他は一方はJava言語自身の拡張として存在する。これらは以下を含む:
最も現代的なOSでは、再利用可能なコードの大きな集まりがプログラマの仕事を容易にした。このコードは一般的にアプリケーションが実行時に呼び出せる動的読込ライブラリのセットとして提供される。Javaプラットフォームは特定のOSに依存しないため、アプリケーションは既存のライブラリのいくつかに頼ることはできない。それどころか、Javaプラットフォームは多くのものを含む標準クラスライブラリの集合を提供し、多くの現代のOSで一般に見つかる同じく再利用可能な機能の多くを含んでいる。JavaクラスライブラリはJavaプラットフォームで三つの意図を役立てる。標準コードライブラリのように、それらはプログラマに、よく知られた、品目リストを保持する、複雑な文字列解析を行うというような共通のタスクを成し遂げる機能セットを提供する。その上、クラスライブラリはハードウェアやOSへの強い依存が普通である仕事を果たす抽象インタフェースを提供する。ネットワーク接続とファイルアクセスのようなタスクはよくプラットフォーム特有の能力に強く依存する。Javaのjava.netとjava.ioライブラリは、時には内部に必要不可欠なネイティブコードを実装しており、時にはそれらのタスクを機能するJavaアプリケーションの標準インタフェースを提供する。最終的に、いくらかの基礎を成すプラットフォームはJavaアプリケーションが期待する特色の全てをサポートするかもしれない。これらの件についていえば、クラスライブラリはどんなに役立つものも使うそれらの特色をエミュレートするか、特別な特色の存在をチェックする一貫した方法提供するかのどちらかを行使できる。現在のところ、JREに含まれているクラスライブラリは依然として私有のソフトウェアである。互換性のあるフリーライブラリの集合で記述されているFree Software Foundationの進行プロジェクトがある。それはGNU Classpathと呼ばれている。2006年11月13日に、サンはJavaソースコード全てが2007年3月にGNU General Public Licenseのもとでリリースされると発表した。
Javaプラットフォームの本質はJavaバイトコードを実行する「仮想機械 (virtual machine)」の発想である。Javaバイトコードは実行プログラムの下にどんなハードウェアやOSがあろうと全く同じである。JITコンパイラはJava仮想マシン (Java virtual machine) で動く。JITコンパイラは実行時にJavaバイトコードをネイティブなプロセッサ命令に翻訳し、プログラム実行中にメモリ上にネィティブコードをキャッシュする。中間言語としてのバイトコードの使用は、バーチャルマシンが存在する様々なプラットフォーム上でJavaプログラムが走ることを可能にする。JITコンパイラの使用はローディングによる僅かな遅延と、それらが一度にほとんどまたは全てJITコンパイルされ、一度「ウォームアップ」した後で、Javaアプリケーションがネイティブなプログラムと同じくらいの速さで走る傾向があることを意味する。JREバージョン1.1以来、サンのJava VM実装はインタプリタだけでなく、JITコンパイラも含んでいる。
福山市立神村小学校時代より優等生で学校の成績はトップクラスだったが、福山市立大成館中学校卒業後は野球に打ち込む為、池田善蔵（元太陽、金星・大映、阪急）が監督を務めていた広島県立尾道商業高等学校に進学。先進的な指導を受け、エースとなる。1963年の秋季地区大会で準優勝。この結果、1964年に春の選抜大会に出場する。ノーマークだったが、独持のスリークォーター似のサイドスローから変化球を操る小川の2完封などで決勝へ進出。相手は3完封で勝ち進んで来た尾崎正司がエースの海南高校。第1回大会を除くと史上初の初出場対決となった決勝は、初めて外野席の入場制限が出るほどの大人気となった。試合は尾道商が7回までリードし、小川曰く「尾道市内をパレードしている姿が浮かんだ」が、体は既に限界を超え、8回に尾崎の三塁打などを浴び逆転。9回裏の尾道商2死満塁の逆転機に小川が一飛に終わり、2-3で敗戦、準優勝にとどまる。同年の春季九州大会では、準決勝で下関商の池永正明に投げ勝ち、決勝でも柳井高を降し優勝を飾る。6月の新潟国体でも決勝に進出し、選抜で完封した博多工と対戦。エース橋本孝志と投げ合うが、今回は0-2で完封を喫しまたも準優勝に終わる。夏の県予選決勝では広陵に敗れ、甲子園出場を逸した。高校同期に四番打者、遊撃手で南海入りした田坂正明がいる。1965年4月、早稲田大学第二文学部西洋哲学専修に入学。野球部には上級生に八木沢荘六、三輪田勝利など好投手がおり、なかなか出番がなかったが、3年生時から東京六大学リーグに出場。一年下の左腕投手、小坂敏彦とともに1968年秋季リーグの優勝に貢献、しかし、同季には田淵幸一にリーグ新記録となる22号本塁打を打たれている。リーグ通算22試合登板、10勝5敗、防御率2.70、63奪三振。大学同期には長倉春生（大昭和製紙)、蓑輪努（日本楽器）がいた。1969年3月、早稲田大学第二文学部西洋哲学専修卒業、学位は学士。その後は日本鋼管（現：JFE西日本）に進み、1969年に日本石油、1971年に三菱自動車川崎の補強選手として都市対抗野球大会に出場。1972年に入団テストを受け、ドラフト7位で読売ジャイアンツに入団。