我對這個東西相當新,但實質上:有程序和過程。程序是執行時產生進程的文件。Java程序可以在沒有其文件的情況下運行嗎?
如果還有與其關聯的進程,則無法刪除程序。這個過程需要先被殺死。
這似乎也是Java程序的情況。不過,我很好奇爲什麼 - 不是將整個東西加載到JVM中?
我對這個東西相當新,但實質上:有程序和過程。程序是執行時產生進程的文件。Java程序可以在沒有其文件的情況下運行嗎?
如果還有與其關聯的進程,則無法刪除程序。這個過程需要先被殺死。
這似乎也是Java程序的情況。不過,我很好奇爲什麼 - 不是將整個東西加載到JVM中?
JVM作爲即時(JIT)編譯器工作。關於JIT編譯有很多信息來源,但基本上當一個java程序運行時會遇到需要的部分程序,這些程序都在.class
文件中。這些.class
文件只是Java代碼的一種中間形式(它不完全是Java代碼,但不是機器代碼)。顯然,在運行時編譯(JIT)需要資源(CPU週期),因此需要時間。所以,JVM只會加載它需要的程序片斷,以減少浪費的CPU週期。
但是,您對過程/程序的理解是正確的。總結:一個進程是一個運行實例的一個程序。這個運行程序,然後可以派生更多的進程或線程來執行工作。
「刪除的文件」涉及到som OS語義。在Unix/Linux下,可能會刪除一個文件,並且所有打開的文件句柄保持有效。當最後一個打開的文件句柄消失時,被刪除文件佔用的空間將返回到可用空間池。
在Windows下可能有其他機制。
JVM不會在同一時刻加載所有東西,它會在需要時加載類。 –
你能鏈接到你看到「程序」定義的地方嗎?在* nix中,內核派生進程,然後處理派生進程(和線程)。 –
這將是OS和JVM特定的。 –