That&#x27;s the short answer, but to elaborate, it probably has more to do with the <i>culture</i> surrounding the language than the overhead of the JVM, although that also plays a role. What I mean by &quot;culture&quot; is the widespread notion (cargo-cult?) among Java programmers that adding more classes and abstraction is always better, almost like a &quot;best practice&quot;, leading to &quot;enterprise&quot; monstrosities with deep inheritance hierarchies and ridiculous amounts of indirection to accomplish the simplest of tasks. The low consideration given to memory management in general (there&#x27;s a GC, but that doesn&#x27;t mean you should abandon all thought about memory allocation --- an analogy I like to use is how it&#x27;s possible to get as good fuel economy with an automatic transmission as a manual, with the right technique) also contributes to the bloat.<p>The JVM itself has a certain amount of unavoidable overhead, but even if it was e.g. 10x slower than native code at best, I don&#x27;t think that&#x27;s the main problem. I&#x27;ve used systems that were more than 10x slower in benchmark-terms and had less than 1&#x2F;10th the memory, yet felt much more responsive and performant. The problem is the culture that encourages this massive resource waste and selfish conservation of developer&#x27;s time --- at the expense of everyone else.