Isn't the JVM too big of a performance compromise for large scale software where every bit of performance matters?
Actually no - having a good concurrent garbage collector actually helps a lot.
Consider any message passing system. Messages come into the system, you create an immutable object, and send a reference to that object to other subsystems. Eventually, when each subsystem has processed that object, it is garbage collected.
In C++ you need to manually handle tracking the object and deleting it when it's no longer needed. This dramatically hinders the sort of systems you can reliably build.
As for low level performance, the JVM is actually very fast - i.e., nearly as fast as C. The main places where it becomes an issue is that you can't always control the cache locality of objects.
class Foo {
val bar: Bar
val y: Int
}
In C/C++ you can demand that foo.bar be stored in the same page. On the JVM you can't.
Actually no - having a good concurrent garbage collector actually helps a lot.
Consider any message passing system. Messages come into the system, you create an immutable object, and send a reference to that object to other subsystems. Eventually, when each subsystem has processed that object, it is garbage collected.
In C++ you need to manually handle tracking the object and deleting it when it's no longer needed. This dramatically hinders the sort of systems you can reliably build.
Further thoughts on this here: http://www.chrisstucchio.com/blog/2013/why_not_python.html
As for low level performance, the JVM is actually very fast - i.e., nearly as fast as C. The main places where it becomes an issue is that you can't always control the cache locality of objects.
In C/C++ you can demand that foo.bar be stored in the same page. On the JVM you can't.