Excelsior, maker of the Excelsior JET ahead-of-time Java compiler, wrote about JVM compilation, garbage collection, and Java tooling.
HN links it as an example of Java AOT compilation, with one commenter criticizing its pricing and others citing its conservative GC article.
I don't have the technical chops to disagree with you. But rest assured I would not do a better job. Last time I checked java programs do not like operating within the same VM[0]. Last time I looked at it, it was to get a bunch of people running Eclipse remotely from the same JVM instance on a huge box in 2012 or something. It was a no-goer, but some experimental JVM's claimed to support it. [1]
Powershell is a terrible example for the performance point I am trying to make, whatever about its flexibility.
[0] http://www.javalobby.org/java/forums/t72620.html
[0] http://stackoverflow.com/a/13496610
[1]http://www.ibm.com/developerworks/library/j-multitenant-java/index.html (this now looks less experimental but I'm willing to bet >1 instance of eclipse, or bash for that matter would not work very well).
I'm not sure how this works:
http://www.excelsiorjet.com/
but it might help to alleviate the problem even though it still has a jvm.
https://en.wikipedia.org/wiki/Java_Classloader
looking at what you mention now, can a program classload itself? seems not: A class with a given name can only be loaded once by a given classloader.
Right, but even a single instruction placed on every backward branch and at the epilogue of every method causes noticeable impact on the performance. This is especially important in highly optimized code and that's why optimizing compilers like HotSpot C2 (and JET as well) try to remove as many safepoints as possible. Sometimes it even causes troubles like in this case:
https://bugs.openjdk.java.net/browse/JDK-5014723
Good point about inspecting thread's callstack. Indeed, with conservative GC we had a problem: many popular profilers were incompatible with JET because they inspect threads at safepoints and we had none. When we implemented the precise GC, this problem disappeared and it was an additional benefit for us. However, there are alternative ways to gather thread's callstack out of safepoint. We use them to avoid safepoint bias in our profiler. You can read more about it here:
https://www.excelsiorjet.com/blog/articles/portable-profilers-and-where-to-find-them/
----
Thanks for kind words! I'm glad that you liked the post!
I don't see the three languages as very different because Algol 60 is their prototype. The distinction between interpreted, VM, and compiled is an implementation rather than a language distinction...e.g. Jython runs on the JVM; Excelsior Jet compiles Java to native code; and Rusti is a Rust REPL.
https://en.wikipedia.org/wiki/ALGOL_60#Examples_and_portability_issues
https://www.excelsiorjet.com/
https://github.com/murarth/rusti
It might as well not exist in this day and age: https://www.excelsiorjet.com/#pricing
Yes, you can argue: "that's not fair", "for a professional programmer that's worth only a few weeks of work's for massive productivity improvements", etc., but things don't work that way.
Most developers have been conditioned to not use commercial products, if they can. With an extra downside for the commercial product being closed source.
Disclosure: I work for Excelsior.
Excelsior JET (http://www.excelsiorjet.com), a Java SE JVM with a native code compiler and deployment toolkit, is free for non-commercial use. Note that "non-commercial" != "open source", both ways: there is commercial open-source and closed-source freeware.
http://www.excelsior-usa.com/jetfree.html
I believe you are right. Azul has released a JIT compiler based on llvm: http://www.infoworld.com/article/3193078/java/azul-introduces-llvm-compiler-to-java-runtime.html
Also: https://www.excelsiorjet.com/
and there seem to be open source projects like vmkit, https://github.com/ReadyTalk/avian that are somewhere in between.