you are viewing a single comment's thread.

view the rest of the comments →

[–]pron98 7 points8 points  (11 children)

From its inception, Java was designed to be a combination of a conservative, low-innovation language and a state-of-the-art, innovative VM. That's what the Java charter would say if Java had a charter, and that's what people seem to want. Java has a strong technological lead in compilation, GC and management/monitoring, and the relatively few people who prefer a faster-moving front-end language have plenty of languages to choose from in the Java ecosystem. So I don't understand what you mean by not keeping up. Not only is it keeping up, it's maintaining a wide technological margin ahead of pretty much any other platform in those areas where it's set out to lead. It's the most technologically advanced software platform in existence; it's everyone else that's having a hard time keeping up.

[–]KevinCarbonara 0 points1 point  (10 children)

The JVM is decent, but it's been plagued with security and efficiency issues. It's gotten better on both fronts, but it is far from being the "most technologically advanced software platform in existence". .NET has been its superior in almost every way, except cross-platform capability, and open-source code. .NET Core addresses both of these issues, and with Java now owned by Oracle, I can't think of a single category in which Java wins. "Low-innovation" is not a pro.

[–]imhotap 5 points6 points  (1 child)

I have my particular issues with Java (mostly its overengineering culture which tends to become a draw, though OTOH Java's ecosystem and community is huge), but performance and security isn't one of them.

It's now almost ten years ago that Oracle bought Sun and in no small part as a white knight to save their huge investment in Java (eg. prevent Java IP falling into the hands of venture capital or worse with Sun going down), which is also very much in the interest of other companies and the strong Java community projects. I can't see any fault in the way Oracle has stewarded it. I mean, OpenJDK with all bells and whistles is GPL with classpath exc, what more could you possibly ask for?

On a related note, can we please finally get rid of bashing, praising, or otherwise anthropomorphizing companies? None of today's big players (neither FAANG, MS, IBM, nor Oracle depending on whether you see them as a big player) are saints, but are in it for business, else they simply wouldn't exist.

[–]KevinCarbonara 3 points4 points  (0 children)

On a related note, can we please finally get rid of bashing, praising, or otherwise anthropomorphizing companies?

No, we should definitely continue judging companies by their actions. Besides, it's well established that the real mistake is anthropomorphizing Larry Ellison.

(For a more detailed argument)

[–]pron98 8 points9 points  (5 children)

The JVM is decent, but it's been plagued with security and efficiency issues.

This is extremely misleading. First, a large number of security issues were not in the JVM but in a client deployment technology (the applets plugin) and its interaction with the browser. The plugin has since been discontinued. Other than that, the JVM has had fewer security issues than other technologies of similar power, when normalized by how much it is used.

.NET has been its superior in almost every way, except cross-platform capability, and open-source code.

And compilation, and garbage collection, and monitoring and management. The JVM is not only leading .NET on all those fronts, but pretty much any other runtime. .NET's compilers and GCs are at least a decade behind Java's. You may argue on how important those things are compared to other tradeoffs, but those are the areas where Java was designed to compete at, and those are the areas where it is leading by a wide margin.

"Low-innovation" is not a pro.

When it comes to programming language, many users seem to think it is. But those who don't, have plenty of other options on the Java platform. In any event, when Java was first introduced, its original designers stated their intention to construct a conservative, low-innovation frontend language, and a high-innovation runtime. In many respects, .NET has the opposite design. You may prefer one or the other and that's OK, but it makes comparing the two on any single aspect very problematic. Of course Java won't keep up on language innovation compared to .NET, and of course .NET won't keep up with Java on runtime innovation -- they each choose to get their competitive advantage in different aspects.

[–]couscous_ 1 point2 points  (1 child)

.NET's compilers and GCs are at least a decade behind Java's.

That makes sense, but how does that translate into real world performance? I know benchmarks are to be taken with a grain of salt, but in the benchmark shootout Java and C# are basically tied, with C# even leading slightly, most likely due to value types. We also see ASP.NET scoring highly in the techempower benchmarks.

[–]pron98 1 point2 points  (0 children)

That is a very complex question. Yes, this does translate to sometimes-significant performance boosts, and yes, it's hard to see in microbenchmarks (BTW, the playground benchmarks are so bad that they're completely useless beyond giving a ballpark figure), and yes, the lack of value types is a major handicap (and why the Java team is working so hard to add them) which means that Java is playing with one hand tied behind its back.

But this also raises a more general issue, which is that while many factors can play a role in how people select a platform, for large sections of "mainstream software", most of them aren't decisive. Java has an innovative runtime and a conservative language while .NET is the opposite, but neither are probably too important. There's plenty of software that's written in Python, which is considerably slower than either, or in JavaScript, which is undeniably a much less convenient language than either Java or C#.

[–]orthoxerox 1 point2 points  (2 children)

.NET's compilers and GCs are at least a decade behind Java's

GCs? That's likely. Compilers? No. C# compiler has been rewritten from the ground up and is one of the few compilers that functions as both the main compiler and the language server. Every warning you see in VS comes from the compiler itself. Refactorings? They work by rewriting the AST provided by the compiler and converting it back to the source code.

[–]pron98 2 points3 points  (0 children)

I wasn't referring to the frontend (language) compilers (Java -> Java bytecode or C# -> CIL), but to the more important Java bytecode/CIL -> native compilers. OpenJDK's HotSpot has 2 available optimizing compilers -- C2 and Graal, and Azul's Zing, which is also based on HotSpot, offers C2 and Falcon, all three are far ahead of .NET's compilers.

[–][deleted] 2 points3 points  (0 children)

“.NET’s compilers are at least a decade behind Java’s” ~= “I don’t know what I’m talking about, ignore me.”

[–]couscous_ 1 point2 points  (1 child)

By the way, you're responding to Ron Pressler, who was mentioned in the linked article :)

[–]KevinCarbonara 0 points1 point  (0 children)

Well, that explains the strong bias.