Java dikembangkan mengacu pada standar yang ditentukan oleh
komite didalam JCP (Java Community Process).
Spesifikasi Java tidak sekedar fondasi VMnya, tetapi
menyangkut hampir semua aspek, mulai dari mekanisme mengakses devices I/O,
komponen pertukaran objek, sampai pengembangan container. JCP merupakan badan
yang bertanggung jawab terhadap standar teknologi Java.
Virtual Machine
Sebuah mesin virtual (VM) adalah sebuah perangkat lunak
implementasi sebuah mesin (misalnya komputer) yang melaksanakan program-program
seperti mesin fisik. Sebuah mesin virtual pada awalnya ditentukan oleh Popek
dan Goldberg sebagai "yang efisien, terisolasi duplikat dari mesin yang
nyata". Saat menggunakan mesin virtual yang mencakup tidak memiliki
surat-menyurat langsung ke perangkat keras yang nyata.
Mesin virtual dipisahkan ke dalam dua kategori utama,
berdasarkan tingkat penggunaan dan korespondensi untuk mesin nyata. Sebuah
sistem mesin virtual yang lengkap menyediakan platform sistem yang mendukung
pelaksanaan lengkap sistem operasi (OS). Sebaliknya, mesin virtual sebuah
proses yang dirancang untuk menjalankan sebuah program, yang berarti bahwa ia
mendukung satu proses. Karakteristik penting dari sebuah mesin virtual yang
berjalan di dalam perangkat lunak adalah terbatas pada sumber daya dan
abstraksi yang disediakan oleh mesin virtual tidak dapat keluar dari dunia
virtual.
Contoh: Suatu program yang ditulis dalam Java menerima jasa
dari Java Runtime Environment (JRE) perangkat lunak dengan mengeluarkan
perintah untuk, dan menerima hasil yang diharapkan dari, perangkat lunak Java.
Dengan memberikan layanan ini untuk program tersebut, perangkat lunak Java
bertindak sebagai "mesin virtual", menggantikan sistem operasi atau
hardware untuk program yang biasanya akan disesuaikan.
• Sistem virtual machines
Sistem mesin virtual (kadang-kadang disebut mesin virtual
hardware) memungkinkan pembagian yang mendasari sumber daya mesin fisik antara
mesin virtual yang berbeda, masing-masing berjalan sendiri sistem operasi.
Lapisan perangkat lunak yang menyediakan virtualisasi ini disebut mesin virtual
monitor atau hypervisor. Sebuah hypervisor dapat berjalan di hardware yang
telanjang (Tipe 1 atau pribumi VM) atau di atas sistem operasi (Tipe 2 atau
host VM).
Keuntungan utama dari sistem VMS adalah:
• beberapa OS lingkungan dapat hidup berdampingan pada
komputer yang sama, dalam isolasi kuat satu sama lain
• mesin virtual dapat memberikan set instruksi arsitektur
(ISA) yang agak berbeda dari mesin yang sebenarnya
• aplikasi provisioning, pemeliharaan, tingkat ketersediaan
dan pemulihan bencana
Kerugian utama dari sistem VMS adalah:
• mesin virtual kurang efisien daripada mesin nyata karena
secara tidak langsung mengakses perangkat keras
Beberapa VMS masing-masing berjalan sistem operasi mereka
sendiri (yang disebut sistem operasi tamu) yang sering digunakan di server
konsolidasi, di mana layanan yang berbeda yang digunakan untuk menjalankan
mesin individu untuk menghindari gangguan yang terpisah, bukan berjalan di VMS
pada mesin fisik yang sama. Penggunaan ini sering disebut-kualitas dari
layanan-isolasi (QoS isolasi).
Keinginan untuk menjalankan beberapa sistem operasi adalah
motivasi asli untuk mesin virtual, seperti time-sharing memungkinkan satu
komputer di antara beberapa single-tasking OS. Teknik ini memerlukan proses
untuk berbagi sumber daya CPU antara sistem operasi tamu dan memori
virtualisasi untuk berbagi memori pada host.
OS tamu tidak harus sama, sehingga memungkinkan untuk
menjalankan OS yang berbeda pada komputer yang sama (misalnya, Microsoft
Windows dan Linux, atau versi lama dari sistem operasi untuk mendukung
perangkat lunak yang belum porting ke versi terbaru). Penggunaan mesin virtual
untuk mendukung OS tamu yang berbeda menjadi populer di embedded system; tipikal
digunakan adalah untuk mendukung real-time sistem operasi pada saat yang sama
sebagai OS tingkat tinggi seperti Linux atau Windows.
Penggunaan lainnya adalah untuk sandbox sebuah OS yang tidak
dipercaya, mungkin karena itu adalah sebuah sistem dalam pengembangan. Mesin
virtual memiliki keuntungan untuk OS lain pembangunan, termasuk akses debugging
yang lebih baik dan lebih cepat reboot.
Teknik alternatif seperti Solaris Zones menyediakan tingkat
isolasi dalam satu sistem operasi. Ini tidak memiliki isolasi selengkap sebagai
VM. Sebuah kernel mengeksploitasi dalam suatu sistem dengan beberapa zona akan
mempengaruhi semua zona. Mencapai tujuan yang sama dalam implementasi mesin
virtual akan membutuhkan mengeksploitasi kelemahan dalam hypervisor. Sebuah hypervisor
biasanya memiliki lebih kecil "serangan permukaan" dari sebuah sistem
operasi yang lengkap, membuat ini lebih menantang. Lebih lanjut, sebuah kernel
mengeksploitasi tamu di VM tidak akan mempengaruhi VMS lain pada host, seperti
gangguan yang sukses menjadi satu zona belum tentu mempengaruhi zona lain. Zona
tidak mesin virtual, tetapi contoh "virtualisasi sistem operasi". Ini
termasuk lain "lingkungan virtual" (juga disebut "virtual
server") seperti Virtuozzo, FreeBSD penjara, Linux-VServer, chroot penjara,
dan OpenVZ. Ini memberikan beberapa bentuk rangkuman proses dalam sebuah sistem
operasi. Teknologi ini memiliki keunggulan sumber daya yang lebih efisien
daripada virtualisasi penuh dan memiliki lebih baik observability menjadi
beberapa tamu secara simultan; yang merugikan adalah bahwa, pada umumnya,
mereka hanya dapat menjalankan satu sistem operasi dan satu versi / patch
tingkat sistem operasi bahwa -- jadi, misalnya, mereka tidak dapat digunakan
untuk menjalankan dua aplikasi, salah satu yang hanya mendukung versi OS yang
lebih baru dan yang lain hanya mendukung versi OS yang lebih lama pada hardware
yang sama. However, Sun Microsystems has enhanced Solaris Zones to allow some
zones to behave like Solaris 8 or Solaris 9 systems by adding a system call
translator. Namun, Sun Microsystems telah meningkatkan Solaris Zones untuk
memungkinkan beberapa zona untuk berperilaku seperti Solaris 8 atau Solaris 9
sistem dengan menambahkan system call penerjemah.
• Proses mesin virtual
Sebuah proses VM, kadang-kadang disebut aplikasi mesin
virtual, berjalan sebagai aplikasi biasa di dalam sebuah OS dan mendukung
proses tunggal. Hal ini tercipta ketika proses itu dimulai dan hancur ketika
keluar. Tujuannya adalah untuk menyediakan sebuah platform-independen lingkungan
pemrograman yang abstrak pergi rincian perangkat keras yang mendasarinya atau
sistem operasi, dan memungkinkan sebuah program untuk mengeksekusi dengan cara
yang sama pada platform apapun.
Sebuah proses VM memberikan abstraksi tingkat tinggi - yaitu
yang tinggi tingkat bahasa pemrograman (dibandingkan dengan tingkat rendah ISA
abstraksi dari sistem VM). VMS proses diimplementasikan menggunakan
interpreter; kinerja yang sebanding dengan bahasa pemrograman terkompilasi
dicapai dengan menggunakan just-in-time compilation .
Jenis VM ini telah menjadi populer dengan bahasa pemrograman
Java, yang diimplementasikan menggunakan mesin virtual Java. Contoh lain
termasuk Bayan mesin virtual, yang berfungsi sebagai lapisan abstraksi selama
beberapa ditafsirkan lanugages, dan. NET Framework, yang berjalan pada sebuah
VM yang disebut Common Language Runtime.
Suatu kasus khusus VMS adalah proses sistem yang abstrak
atas mekanisme komunikasi yang (berpotensi heterogen) komputer cluster. Seperti
VM tidak terdiri dari sebuah proses tunggal, tetapi satu proses per mesin fisik
di cluster. Mereka dirancang untuk memudahkan tugas pemrograman aplikasi
paralel dengan membiarkan programmer fokus pada algoritma daripada mekanisme
komunikasi yang disediakan oleh interkoneksi dan OS. Mereka tidak
menyembunyikan fakta bahwa terjadi komunikasi, dan dengan demikian tidak
berusaha untuk menyajikan cluster sebagai satu mesin paralel.
Tidak seperti proses lain VMS, sistem ini tidak menyediakan
bahasa pemrograman tertentu, tetapi tertanam dalam bahasa yang ada; biasanya
sistem seperti menyediakan binding untuk beberapa bahasa (misalnya, C dan
FORTRAN). Examples are PVM ( Parallel Virtual Machine ) and MPI ( Message
Passing Interface ). Contohnya adalah PVM (Paralel Virtual Machine) dan MPI
(Message Passing Interface). Mereka tidak ketat mesin virtual, sebagai aplikasi
yang berjalan di atas masih memiliki akses ke semua layanan OS, dan karena itu
tidak terbatas pada model sistem yang disediakan oleh "VM".
APIs
Sebuah application programming interface (API) adalah
antarmuka bahwa sebuah program perangkat lunak alat untuk memungkinkan
perangkat lunak lain untuk berinteraksi dengan itu, banyak cara yang sama
seperti perangkat lunak mungkin akan mengimplementasikan antarmuka pengguna
untuk memungkinkan manusia untuk menggunakannya. API dilaksanakan oleh
aplikasi, perpustakaan dan sistem operasi untuk menentukan bagaimana perangkat
lunak lain dapat membuat panggilan ke atau layanan permintaan dari mereka.
Sebuah API menentukan kosa kata dan konvensi memanggil para pemrogram harus
mempekerjakan untuk menggunakan layanan . Ini mungkin termasuk spesifikasi
untuk rutinitas, struktur data, kelas objek, dan protokol yang digunakan untuk
berkomunikasi antara konsumen dan pelaksana API.
• Fitur
API adalah sebuah abstraksi. Perangkat lunak yang
menyediakan fungsionalitas yang dijelaskan oleh API dikatakan sebuah
implementasi dari API.
API dapat:
• Tergantung pada bahasa, yaitu hanya tersedia dalam bahasa
pemrograman tertentu, dengan menggunakan sintaks dan unsur-unsur bahasa itu
untuk membuat API nyaman untuk digunakan dalam konteks ini.
• Bahasa-independen, yaitu ditulis dengan cara yang berarti
dapat dipanggil dari beberapa bahasa pemrograman. Ini adalah fitur yang
diinginkan untuk layanan-gaya API yang tidak terikat pada suatu proses atau
sistem dan dapat diberikan sebagai remote procedure calls atau layanan web.
Sebagai contoh, sebuah website yang memungkinkan pengguna
untuk memeriksa restoran lokal mampu lapisan tinjauan di atas peta mereka
diambil dari Google Maps, karena Google Maps API yang memiliki memungkinkan hal
ituGoogle Maps 'API mengontrol informasi apa pihak ketiga situs bisa ambil, dan
apa yang bisa dilakukan dengan itu.
"API" dapat digunakan untuk mengacu ke antarmuka
lengkap, satu fungsi, atau bahkan satu set berbagai API yang disediakan oleh
sebuah organisasi. Dengan demikian, cakupan makna biasanya ditentukan oleh
orang atau dokumen yang mengkomunikasikan informasi.
• Web API
Ketika digunakan dalam konteks pengembangan web, biasanya
sebuah API yang didefinisikan set Hypertext Transfer Protocol (HTTP) pesan
permintaan bersama dengan definisi respon struktur pesan, biasanya dinyatakan
dalam sebuah Sementara "Web API" secara virtual sinonim untuk layanan
web, tren baru-baru ini (yang disebut Web 2.0) telah bergerak jauh dari Simple
Object Access Protocol (SOAP) layanan berbasis lebih langsung terhadap Negara
Representasi Transfer (REST) gaya komunikasi. Web API memungkinkan kombinasi
dari berbagai layanan ke aplikasi baru yang dikenal sebagai mashup.
• Implementasi
POSIX standard mendefinisikan sebuah API yang memungkinkan
berbagai fungsi komputasi umum harus ditulis sedemikian rupa sehingga mereka
dapat beroperasi pada banyak sistem yang berbeda (Mac OS X dan berbagai
Berkeley Software Distribusi (BSD) mengimplementasikan interface ini), namun,
dengan menggunakan ini memerlukan kompilasi ulang untuk setiap platform. API
yang kompatibel, di sisi lain, memungkinkan dikompilasi kode obyek untuk
berfungsi tanpa perubahan apapun, pada pelaksanaan sistem apapun yang API. Hal
ini menguntungkan kedua penyedia perangkat lunak (di mana mereka dapat
mendistribusikan perangkat lunak yang ada pada sistem baru tanpa memproduksi /
mendistribusikan upgrade) dan pengguna (di mana mereka mungkin lebih tua
menginstal perangkat lunak pada sistem baru mereka tanpa membeli upgrade),
meskipun hal ini memerlukan berbagai perangkat lunak secara umum pelaksanaan
perpustakaan API diperlukan juga.
Microsoft telah menunjukkan komitmen untuk API yang
kompatibel ke belakang, terutama di dalam Windows API (Win32) perpustakaan,
seperti aplikasi yang lebih tua dapat berjalan di Windows versi yang lebih baru
menggunakan pengaturan khusus eksekusi yang disebut "Compatibility
Mode" . Apple Inc telah menunjukkan kecenderungan yang kurang perhatian
ini, memecah kompatibilitas atau mengimplementasikan dalam sebuah API yang
lebih lambat "mode emulasi"; ini memungkinkan kebebasan lebih besar
dalam pembangunan, pada biaya pembuatan perangkat lunak yang lebih tua usang.
Antara Unix-seperti sistem operasi, ada banyak terkait
tetapi tidak sesuai sistem operasi berjalan pada platform hardware yang umum
(khususnya Intel 80386 sistem yang kompatibel). Sudah ada beberapa usaha untuk
standarisasi API vendor perangkat lunak sehingga dapat mendistribusikan satu
aplikasi binari untuk semua sistem ini, namun sampai saat ini, tidak satu pun
telah bertemu dengan banyak keberhasilan. Linux Standard Base adalah berusaha
untuk melakukan hal ini untuk Linux platform, sementara banyak dari beragam
Unix BSD (FreeBSD, NetBSD, OpenBSD) menerapkan berbagai tingkat kompatibilitas
API untuk kedua backward compatibility (memungkinkan program yang ditulis untuk
versi lama untuk berjalan di distribusi baru sistem) dan lintas-platform
kompatibilitas (memungkinkan eksekusi kode asing tanpa mengkompilasi ulang).