quite an interesting subject: startup time :)<p>sure the garbage collector make a difference but the big difference imho is how the VM interpret the bytecode.<p>In the JVM, the long startup time is because the bytecode is fully loaded, verified, etc. then interpreted<p>If you compare with other VM, like the AVM2 (ActionScript Virtual Machine 2), there the bytecode is considered as a stream, even if your program is many hundred of MB, the interpreter kick in much earlier.<p>It is explained in a presentation at Standord University by Rick Reitmaier from Adobe Systems<p>see at 31:35, <a href="https:&#x2F;&#x2F;youtu.be&#x2F;BjYRzwDEIyw?t=1894" rel="nofollow">https:&#x2F;&#x2F;youtu.be&#x2F;BjYRzwDEIyw?t=1894</a> , he talk about startup time.<p>In my own experience working with AVM2 on my OSS project Redtamarin
<a href="https:&#x2F;&#x2F;github.com&#x2F;Corsaair&#x2F;redtamarin" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;Corsaair&#x2F;redtamarin</a> , this startup time was key.<p>Wether you run the AVM2 from a shell script, a standalone executable or even as CGI under Apache, the avmshell which run, load, verify, interpret the bytecode, startup in matter of milliseconds.<p>But it is a trade, you could say<p>JVM: slow startup time, faster execution<p>AVM2: fast startup time, slower execution