Kısa cevap: genellikle, evet, JVM başına bir başvuru alırsınız. Uzun cevap: JVM bu şekilde kullanılabilir ve bu en iyi seçenek olabilir, ancak olması gerekmiyor.
Her şey neyi bir 'uygulama' olarak gördüğünüze bağlıdır. Bir IDE, son kullanıcılarına (yani bize) tek bir varlık olarak sunulan ancak aslında birden fazla temel uygulamadan (derleyiciler, test çalıştırıcıları, statik analiz araçları, paketleyiciler, paket yöneticileri, proje / bağımlılık yönetimi araçları, vb.). Bu durumda, IDE'nin kullanıcının entegre bir deneyim yaşamasını sağlamak için kullandığı çeşitli hileler vardır ve aynı zamanda altta yatan araçların bireysel değişkenlerinden (bir dereceye kadar) korunmaktadır. Böyle bir hile, bazı şeyleri ayrı bir JVM'de yapmak, ya metin dosyalarıyla ya da uygulama düzeyinde hata ayıklama araçlarıyla iletişim kurmaktır.
Uygulama sunucuları (Wildfly, Glassfish, Websphere, Weblogic, vb.), Varoluş nedeni diğer uygulamaların içinde çalışması için konteyner görevi görmesi gereken uygulamalardır. Bu durumda, bir açıdan bakıldığında, uygulama başına tek bir JVM (yani bir JVM) vardır. uygulama sunucusunun tamamını çalıştırmak için kullanılır), ancak aslında bu JVM içinde kendi başlarına bulunan ve her biri kendi sınıf yükleyicisinde mantıksal olarak birbirinden ayrılmış (işlem sırasında kazara çapraz konuşma olasılığını azaltan) birden çok uygulama vardır.
Yani, gerçekten ne olduğunu düşündüğünüze bağlı application
. Tamamen "'main ()' çağrıldığında çalışan şeyden" bahsediyorsanız, JVM başına bir uygulamaya bakarsınız - işletim sistemi JVM'yi başlattığında, JVM tek bir sınıfın public static void main()
yöntemini çalıştırır.
Ancak uygulamalarınız daha karmaşık hale gelmeye başladığında, sınırlarınız daha bulanık hale gelir. Intellij veya Eclipse gibi bir IDE, 'javac' ile aynı şeylerin çoğunu aynı JVM'de veya farklı bir JVM'de yeniden kullanacak ve farklı işler yapacaktır (ekranı yeniden boyamak gibi). Ve bir (paylaşılan JVM) uygulama sunucusundaki bir web uygulamasının kullanıcıları, aslında komut satırı aracılığıyla yerel olarak kullanılabilen aynı "çekirdek" uygulamayı kullanıyor olabilir.