
Permalink for comment 353929
RE[4]: Sad to say
by ba1l on Thu 19th Mar 2009 15:39 UTC in reply to "RE[3]: Sad to say"
Member since:

Also, there is only ever one runtime running (as opposed to java/ruby/python/etc), and individual programs are segregated into "AppDomains" under that single runtime.

Except when it isn't.

Application domains can be used to host multiple applications inside a single OS process. However, the app domains are implemented as multiple copies of the .NET VM running inside a single process. Even if you have a single process with 10 application domains, you still have multiple VMs, which are deliberately kept isolated from one another. Big deal - pretty much any VM runtime can do that.

That's how the .NET VM is hosted inside SQL Server, how it's used in IIS for ASP.NET websites, and how it's hosted as a COM object inside other applications.

However, that's not how most .NET applications run. If you run a .NET application, a new process will be created, creating a new instance of the .NET VM along with it.

What it can do is pre-compile the assemblies in the GAC to native code. That way, the native code can be shared by any application using it - the runtime just mmaps the code to memory, and the OS just maps the same block of memory into each VM's address space.

That's something that other VMs don't do yet, although I believe Sun were working on some sort of JIT cache for Java that'd perform the same role.

Reply Parent Score: 3