در مورد جاوا همیشه مواردی به گوش می رسد مانند اینکه:

  • شی گراست (object-oriented) 
  • مستقل از سیستم عامل است (platform independent)
  • توانایی reflection دارد (reflection-oriented)
  • ...
برنامه نویسان با تعریف شی گرایی آشنا هستند. در این پست به مفهوم platform independency می پردازیم.

جاوا مستقل از سیستم عامل است: زبان های برنامه نویسی به طور عمده به دو دسته تقسیم می شوند:
  • زبان های کامپایلری (compiled language) مانند ada, خانواده C , ...
  • زبان های مفسری (interpreted language) مانند php, ruby, ...
در زبان های کامپایلری نحوه کامپایل شدن برنامه به شکل زیر است:

Source code ---> Compiler --->Machine code ---> OS

کد برنامه به کامپایلر داده می شود، کامپایلر کد را به کد زبان ماشین تبدیل می کند و سیستم عامل کد ماشین را اجرا می کند. این کد ماشین وابسته به سیستم است و کدهای کامپایل شده در یک محیط، در محیط متفاوت دیگر کار نمی کند.

اما در زبان های مفسری روند اجرای برنامه به این شکل است:

Source code ---> Interpreter ---> OS

کد به مفسر داده می شود اما مفسر کدی تولید نمیکند (بر عکس کامپایلر) و کدها را خط به خط اجرا می کند.

اما برای جاوا موضوع متفاوت است:
Source code ---> javac compiler---> Byte code ---> JRE(JVM+ lib) ---> OS 

کدها توسط  javac compiler کامپایل شده و خروجی Byte code داده می شود. بایت کدها توسط مفسر جاوا، تفسیر و خط به خط اجرا می شوند. 
در سیستمی که JVM روی آن نصب شده است دیگر نگرانی برای اجرای برنامه وجود ندارد چون JVM وظیفه دارد که برنامه را با محیطی که قرار است روی آن اجرا شود تطبیق دهد.

jvm

برای سیستم عامل های معروف ویندوز، لینوکس، مکینتاش و ... شرکت اوراکل مفسر های مخصوص را تولید کرده است. پس مستقل از پلتفرم بودن به این معناست که برنامه های جاوا بر روی سیستم عامل های معروف که شرکت اوراکل مفسر آنها را ارایه کرده است قابل اجرا هستند. در نتیجه اگر شخص یا گروهی سیستم عاملی تولید کنند برنامه های جاوا روی آنها اجرا نمی شوند (مگر اینکه مفسر انها نوشته شود).