Hacker News new | past | comments | ask | show | jobs | submit login

Honest question: what do you consider the advantages of the JVM over native code?



- "Write once, run everywhere." as the sibling poster mentions. I can build on my Mac, deploy on whatever the server platform is.

Snapshot and release builds of our build server are distributed via a Nexus-managed repository. So, everyone codes against exactly the same dependencies, regardless of the platform.

- Hotswapping/JRebel.

- Good interoperability with other languages. E.g. the Typesafe folks implemented Akka in Scala. Java gets it for (well, almost) free.

- Easy monitoring and instrumentation.

Obviously, there are downsides as well, such as startup times (twofold: starting the VM and Hotspot detection/compilation), preset heap size, expensive JNI (native interface), etc.


> Write once, run everywhere

Well, so Go is "write once, build 3-9x, run anywhere".. close enough ;)


i think i would rather build a binary for each platform and run as fast as possible than to build once and run slow on all platforms.


Except that Java code typically runs as fast or faster in the JVM than compiled Go code[1]. Of course, Go is still new and gc and gcc-go will be optimized further.

But Java bytecode execution is definitely not slow and usually within 2x the execution time of a C implementation, which is faster than the vast majority of other language implementations.

[1] At least in the language benchmarks game. Yes, I know that microbenchmarks are not representative, etc. etc. etc. (Until your favorite language is faster ;).)


Java is a damn memory hog, but for server-side kind of stuff, not really slow.


Only it's the reverse. Java runs faster than Go.


For now, if this continues to narrow it will not be true much longer: http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?t...


This is a false dichotomy.


Well-defined semantics, including for "errors" like integer overflow or null dereference.

A community that's converged on a deterministic, crossplatform way of representing library dependencies (maven).

An ABI that includes a notion of objects, which makes cross-language interoperability with objects easier (though counterbalanced by not having a cross-language notion of functions).


Definitely deployment flexibility. Write on OSX, Test on Linux, Run on Solaris.

But also performance. JVM can be faster than say C/C++ code in many cases.


"Write once, run anywhere"


I've heard this far more commonly from Java programmers as "Write once, debug everywhere", but maybe that's changed. (this was quite some time ago)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: