8 ms·
Multi-tenant Java 8 VM in beta
- polskibus 13y agoDoes anyone know if .NET runtime is multitenant? Would be great to know about the alternatives (and their future plans).
- kevingadd 13y ago.NET has a feature called 'application domains' which provides stuff pretty similar to this, but I don't know if the support is as complete. They use it for security sandboxing, on-demand code loading/unloading, etc. http://msdn.microsoft.com/en-us/library/2bh4z9hs.aspx http://msdn.microsoft.com/en-us/library/2bh4z9hs.aspx
- rektide 13y agoI believe in Mono if one does Ahead-of-Time compilation the bytecode is just mem mapped in and can be shared between runtimes, giving you much of the advantage of this work.
- pjmlp 13y agoThere is no bytecode any longer when you do AOT, just plain pure native code.
- SideburnsOfDoom 13y ago.Net runs in various places. Under IIS, you're thinking of Application Pools http://stackoverflow.com/questions/3868612/what-is-an-iis-application-pool http://stackoverflow.com/questions/3868612/what-is-an-iis-ap...
- polskibus 13y agoan app pool usually (without farm setting) translates to one w3wp process, so the deduplication doesn't take place. That would mean there's no real multitenancy in IIS via app pools.
- silverlake 13y agoYes, .NET has had Application Domains since the beginning. It can be used for exactly this purpose. "You can run several application domains in a single process with the same level of isolation that would exist in separate processes, but without incurring the additional overhead of making cross-process calls or switching between processes. The ability to run multiple applications within a single process dramatically increases server scalability." http://msdn.microsoft.com/en-us/library/2bh4z9hs.aspx http://msdn.microsoft.com/en-us/library/2bh4z9hs.aspx
- rektide 13y agoJava has had Class Data Sharing (CDS) since jdk1.5, an archive of "standard libraries" shared between all instances. It can be rebuilt with additional libraries, speeding their load and reducing their footprint. Links to notes on this, https://plus.google.com/113218107235105855584/posts/K9seVudjaiU https://plus.google.com/113218107235105855584/posts/K9seVudj... . Stack overflow q, http://stackoverflow.com/questions/4692076/speed-up-application-start-by-adding-own-application-classes-to-classes-jsa http://stackoverflow.com/questions/4692076/speed-up-applicat... CDS is fantastically un-isolated and using it is going to be systemwide. You're still running many many java copies, and that is fat in size, ugly and busted in form. Containers like Tomcat exist to solve a near-like problem of being a many-application serving system. This virtualized virtual machine is definitely the first runtime that's oriented to multi-tenant, but if you look around, you can find some it's technical roots here and there.
- modsrm 13y agoNot sure it is the first one: http://www.waratek.com/product/cloudvm http://www.waratek.com/product/cloudvm
- eliasmacpherson 13y agoI came across CDS before when trying to get desktop java applications to start up faster. I also had hoped it would allow e.g. a constantly running fat server to run eclipse for multiple users more efficiently than each desktop duplicating work. http://lukas.zapletalovi.com/2012/11/want-faster-java-startups-in-fedora.html http://lukas.zapletalovi.com/2012/11/want-faster-java-startu... I had thought CDS was just for Sun and IBM implementations, but from the above I can infer it works on OpenJDK too. When you say, 'running many many java copies', do you mean java.exe?
- 6ren 13y agoFantastic for sharing, though the startup time improvement is minor (e.g. I saw 17% improvement). BTW: that SO comment references a pdf that shows how to include your own classes, on pages 61-62 http://www.oracle.com/technetwork/jp/ondemand/java/20110519-java-a-1-greg-400531-ja.pdf; http://www.oracle.com/technetwork/jp/ondemand/java/20110519-... tools link: http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/tip/make/tools/src/build/tools http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/tip/make/tools... IBM's multi-tenancy gives 3.3 speedup, for HelloWorld - worse for others (maybe if they combined it with CDS?) BTW: The only way to get instant Java startup is not to startup - use an already running JVM, with the classes already loaded. It's fast. Just leave it in the background til you need it - it's effectively a server. Especially good to invoke javac this way, for lightening compiles (if like me you don't use an IDE).
- raverbashing 13y agoQuestion: I had the impression that when you had several threads on a Java app this would result in several VMs, is this currently so, was so or it's my mistake and it was never like that?
- SanderMak 13y agoIt was never like that. Threads have their own stack, but that's about it. They can access anything anywhere. Hence the current focus on concurrency using immutable message passing mechanisms on the JVM (actors etc.)
- raverbashing 13y agoOr, to be more specific, what are the differences between thread handling under Linux and Windows regarding to the JVM? Threads in Linux (in general) are separate process that share memory space, in Windows it's different and they're "threads" being scheduled under a parent process.
- teraflop 13y agoWhat's the difference? In both cases, threads have their own stacks but share the rest of their address space. Is there a distinction other than terminology?
- raverbashing 13y agoAh apparently not so much http://stackoverflow.com/questions/3237701/do-threads-created-in-java-behave-differently-on-windows-and-linux http://stackoverflow.com/questions/3237701/do-threads-create... But I would say you would have definitely to watch for a) thread creation time and b) thread priorities (but for most of the applications these are not a problem)
- nl 13y agoThis doesn't answer your question, but I suspect you may have a hazy recollection of something called "green threads"[1]. Green threads existed in early versions of Java (Java 1.1 and below) back in the days when operating systems had trouble with spawning large numbers of threads from a single application. In the Java 1.1 & Linux 2.0 days you could get better Java performance by using green threads. That didn't last long, and around the time Java was being used for server-side applications it had mostly switched over to native threads. So far as your actual question goes: There is little difference between the Java threading implementation on Linux & Windows. [1] http://en.wikipedia.org/wiki/Green_threads#Green_threads_in_the_Java_virtual_machine http://en.wikipedia.org/wiki/Green_threads#Green_threads_in_...
- mhaymo 13y ago> The main cost of using the multitenant JVM is that tenants are less isolated than multiple applications that run in separate JVMs. For example, a native crash in the multitenant JVM affects all tenants. Does anyone know what exactly is meant by a "native crash"?
- ramblerman 13y agoOne permgen to kill them all