Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

This article seems quite off. First, it conflates browser and desktop. Yes, applets died an early and deserved death. That is different from what happened with desktop apps.

A univeral GUI (e.g. Swing) was wrong-headed. I don't actually know what happened after people moved away from Swing. But even in the time range TFA discusses, Intellij IDEA, an IDE written in Java, was a success. It has always been multi-platform, and never had worse than acceptable performance in my experience. It has grown into a large suite of products, and I think it is widely considered to be the best IDE, for pretty much any language you can name, by a wide margin.

Java has become the new COBOL -- the language for business applications, which means backend development. But the continuing success and improvement, and broadening of the JetBrains products pretty much demolishes the argument that Java has declined and fallen on the desktop. JetBrains is an existence proof that it is a very capable platform for anyone who chooses to use it there.



The article glosses over a couple of points I recall from living through the same period:

- JBuilder was performant (and as I recall, for GUI development, awesome). Not sure if it was Swing-based, but it was a counterpoint to the idea that you couldn't build performant Java GUI apps.

- Applets were stifled by Microsoft refusing to include a contemporary Java runtime in IE, which was still dominant around 2000. My recollection is a bit vague now, but I seem to recall that Java applets in IE were stuck on a 1.0 JVM when Java 1.2 was contemporary.

It's worth noting that I was developing on Linux and Windows. The author's experience would have been coloured by his use of the Mac platform. Up until quite recently, Macs were stuck on Java 6 while the rest of us were using Java 8, at least. I can't help but wonder if Apple considered Java to be a second class citizen.


I believe Microsoft went all out on "extinguishing" applets after Sun sued the Microsoft Java project out of existence. Hence the contemporaneous beginnings of C# and the CLR.


> the JetBrains products pretty much demolishes the argument that Java has declined and fallen on the desktop. JetBrains is an existence proof that it is a very capable platform

Your counterpoint doesn't apply to the article because the author's use of "decline & fall" is about market share and dev mindshare and not about any declining technical capabilities. (Notice that the author already agreed with you about Java's capable platform when he wrote: "Despite the ominous tone of this article’s title, I believe that Java is a compelling platform for modern desktop applications.")

Jetbrains releasing new products doesn't change the fact Java lost popularity as a tool for desktop apps in comparison to its 1995 hype. Even during Java's late 1990s peak hype cycle, its usage for desktop apps was never adopted by programmers to the same degree as Electron/Javascript is today.


On the contrary.

Jetbrains IDE's prove the fact that no matter how much you engineer, a java based desktop application will always be slow and eat huge amounts of resources.


I think I have already answered you regarding it, but Jetbrains IDE’s are not resource-hungry because of Java but because they index/cache the code base. You can’t draw meaningful conclusions from that.


As opposed to the Electron-based editors which modern web developers use and heat Starbucks with?


"Software is getting slower more rapidly than hardware is becoming faster."

https://en.wikipedia.org/wiki/Wirth%27s_law


VSCode is Electron-based and it's quite efficient and not such a memory hog.


I can't disagree with anything you say here, except the thing about "the article seems quite off". lol.

This piece covers the state of the technology at that time. In the early 2000's Java was slow. I wasn't familiar with IntelliJ at that time, so can't comment on their performance then. I wouldn't expect it to be dramatically better than other Java apps on the market at that time.

Moore's law has steadily changed the landscape. So have improvements in JIT technology.


The exception doesn’t prove the rule.

It’s ridiculous that I have to modify Java VM arguments so IntelliJ can use more ram and actually index my projects.

The IDE is great, but Java undoubtedly makes it worse.


That’s the fault of jetbrains, not java. They release it with way too old JRE with custom patches and quite shitty default arguments, while it works eons better with no argument at all on an up-to-date jdk, but even more so with the single setting of a low-latency GC, ZGC.

The JVM is a beast, why do you think a good deal of all serious web applications run on top of it?


> The JVM is a beast, why do you think a good deal of all serious web applications run on top of it?

When I run a Java app-server I'm happy to, in fact it's unwise not to, allocate it the maximum possible RAM the underlying server has. That's because I know for sure JVM is the only thing that's going to be running on a server.

On a desktop it's a totally different story. IntelliJ has to compete with other applications for RAM because I'm constantly multi-tasking between browser tabs, Apple Music, Slack app and what not. So allocating RAM to JVM apps on desktop is a world of pain because I, as a desktop user, just don't (want to) know how to fine-tune hardware resources for different apps. I don't allocate heap to Safari, why should it be the case with IntelliJ? Why can't they figure out? Or maybe there should be a desktop version/mode of JVM that'll figure out ideal RAM size and work with it and expand/shrink as needed?


Minecraft on modern JVMs still requires setting memory usage based on how much free RAM you have (though not GC tuning to the same extent as before).


> The JVM is a beast, why do you think a good deal of all serious web applications run on top of it?

The JVM sacrifices latency for throughput, which is good for servers but not for desktops.


Look at ZGC GC. It has less latency due to stop-the-words than what the OS scheduler causes. (Of course at the price of throughput). But also the default GC, while on default being more throughput preferring can be tuned by a single paramater.


> Look at ZGC GC.

I did, it caused huge pauses with my application (I think probably a bug).

> But also the default GC, while on default being more throughput preferring can be tuned by a single paramater.

Sure, but how many people will do even that much tuning? Defaults are important, and IMO Java chooses a bad one; responsive by default and tuneable when you need maximum throughput is better than the reverse. (I suspect they picked the defaults they did to be competitive against C++ in benchmarks, but we're well past the time where that's what you're competing with).

Same as how Go and Electron have been very successful - not because they're great to work in per se, but because they have so much less friction between writing a hello world program and getting an executable you can distribute.


That’s not how it works. It’s not like Java’s GCs in the last decade had any sort of huge pauses unless the program did some stupid shit like allocation in a hot loop. (G1GC, the default since 9 promises by default a 10ms max pause time and it can uphold that under crazy conditions even — and even after that it will get progressively slower instead of a huge increase)

Java’s GCs are the state of the art, if they struggle with a workload then it is pretty much guaranteed that other GCs have already broken down completely at the fraction of that.

Regarding your application, did you check how many objects have you allocated? VisualVM and the like can show you precisely the statistics of your allocations.


> That’s not how it works. It’s not like Java’s GCs in the last decade had any sort of huge pauses unless the program did some stupid shit like allocation in a hot loop.

Or there's a bug. There's a reason ZGC is marked as experimental. G1GC handled the application in question fine, we reverted to that and it wasn't worth our time investigating further.


While there is a possibility of a bug, I really doubt it. G1GC is just a beast and likely has just no problem with the allocation-rate your program uses while ZGC has quite a tradeoff for really low latency.


JetBrains literally has to ship its own fork of the JRE for things like decent font rendering: https://github.com/JetBrains/JetBrainsRuntime

In its success it shows how badly Java has failed.


Because JetBrains is shipping a JDK11 runtime, and huge improvements have been made (including font rendering) in the past three years, ironically making it a pain for JB to update to JDK17.




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

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

Search: