1) Jeśli mam usługę sieciową napisaną w Javie, do uruchomienia będzie potrzebna instancja JVM. Czy zatem JVM można uczynić procesem demona?
Tak, może. Sposób, w jaki to się robi, zależy od systemu operacyjnego i samego kontenera serwera WWW.
2) Jeśli tak, kiedy uruchomimy inną aplikację java, użyje ona tej instancji maszyny JVM lub utworzy nową?
Nie. Każda aplikacja Java korzysta z niezależnej maszyny JVM.
Każda JVM to oddzielny proces, co oznacza, że nie ma współdzielenia stosów, stert itp. (Ogólnie rzecz biorąc, jedynymi rzeczami, które mogą być współużytkowane, są segmenty tylko do odczytu, które zawierają kod podstawowej maszyny JVM i natywnych bibliotek ... w taki sam sposób, w jaki normalne procesy mogą współdzielić segmenty kodu.)
3) Pamięć główna dostępna w każdej maszynie jest stała. Kiedy uruchamiamy jednocześnie n procesów java bez podania początkowego rozmiaru sterty, w jaki sposób rozmiar sterty jest rozkładany między procesy?
Mechanizm decydujący o wielkości stosu, jeśli nie określisz rozmiaru, zależy od używanej maszyny JVM / platformy / wersji oraz od tego, czy używasz modelu „klient”, czy „serwer” (dla maszyn JVM typu Hotspot). Heurystyka nie uwzględnia liczby ani rozmiaru innych maszyn JVM.
Źródła: https://stackoverflow.com/a/4667635/139985
W praktyce prawdopodobnie lepiej byłoby bezpośrednio określić rozmiar sterty.
4) Czy istnieje proces, który zarządza n wystąpieniami maszyny JVM, czy też jest zarządzany przez sam system operacyjny?
Ani. Liczba instancji JVM jest określana przez działania różnych rzeczy, które mogą uruchamiać procesy; np. skrypty demonów, skrypty poleceń, użytkownicy wpisujący polecenia w wierszu poleceń itp. Ostatecznie system operacyjny może odmówić uruchomienia kolejnych procesów, jeśli zabraknie mu zasobów, ale maszyny JVM nie są traktowane inaczej niż inne procesy.
5) Czy w przypadku zatrzymania świata podczas GC ma to wpływ na inne instancje JVM (zakładam, że są to różne wątki)?
Nie. JVM to niezależne procesy. Nie mają żadnego zmiennego stanu. Wyrzucanie elementów bezużytecznych działa na każdej maszynie JVM niezależnie.