Jawaban singkatnya: sering kali, ya, Anda akan mendapatkan satu aplikasi per JVM. Jawaban panjang: JVM dapat digunakan dengan cara itu, dan itu mungkin pilihan terbaik, tetapi tidak harus demikian.
Itu semua tergantung pada apa yang Anda anggap sebagai 'aplikasi'. IDE adalah contoh yang baik dari aplikasi yang disajikan kepada pengguna akhirnya (yaitu kami) sebagai entitas tunggal tetapi sebenarnya terdiri dari beberapa aplikasi yang mendasari (kompiler, runner pengujian, alat analisis statis, pembuat paket, manajer paket, proyek / alat manajemen ketergantungan, dll). Dalam hal ini, ada berbagai trik yang digunakan IDE untuk memastikan bahwa pengguna mengalami pengalaman terintegrasi sambil juga dilindungi (sampai batas tertentu) dari keanehan individu alat yang mendasarinya. Salah satu trik tersebut adalah melakukan beberapa hal dalam JVM terpisah, berkomunikasi baik melalui file teks atau melalui fasilitas debugging tingkat aplikasi.
Server aplikasi (Wildfly, Glassfish, Websphere, Weblogic, dll) adalah aplikasi yang alasan utamanya adalah bertindak sebagai wadah untuk menjalankan aplikasi lain. Dalam hal ini, dari satu perspektif, ada satu JVM per aplikasi (yaitu satu JVM digunakan untuk menjalankan seluruh server aplikasi) tetapi sebenarnya ada beberapa aplikasi yang terkandung di dalam JVM itu dengan haknya masing-masing, masing-masing secara logis dipisahkan satu sama lain dalam classloader mereka sendiri (mengurangi kemungkinan crosstalk dalam proses yang tidak disengaja).
Jadi, itu semua sangat tergantung pada apa yang Anda anggap application
sebagai. Jika Anda hanya berbicara tentang "hal yang berjalan ketika 'main ()' dipanggil", maka Anda melihat satu aplikasi per JVM - saat OS memulai JVM, JVM menjalankan public static void main()
metode kelas tunggal .
Tapi begitu aplikasi Anda mulai menjadi lebih rumit, batasan Anda menjadi lebih kabur. IDE seperti Intellij atau Eclipse akan menggunakan kembali banyak hal yang sama dengan 'javac', baik di JVM yang sama atau yang berbeda, serta melakukan pekerjaan yang berbeda (seperti mengecat ulang layar). Dan pengguna aplikasi web pada server aplikasi (JVM bersama) mungkin sebenarnya menggunakan aplikasi 'inti' yang sama seperti yang dapat digunakan secara lokal melalui baris perintah.