← Back to context

Comment by za3faran

19 hours ago

Java is doing it better (virtual threads + structured concurrency + immutable records and immutable value types).

Not to mention golang is not memory safe: https://www.ralfj.de/blog/2025/07/24/memory-safety.html

Java's virtual threads are not preemptive. Yes there is a paper where they call them preemptive but they define the term differently to claim it. Code stuck in a tight loop is not preempted.

  • Well, go preempts at function calls, does it not? So a CPU-heavy inner loop calculating everything will fail to preempt in both languages - is this really a hill worth dying on?

    Quite obviously the meaningful distinction is from manually inserted preempt points, like async/await languages.

I don't think you understand the threading concurrency topic. Also memory safety is so far off base here, where's that coming from? Java does some stuff okay, but do you really want to defend the horrid JVM problems? Also why can't I have my memory back when it's not in use in tightly packed systems?

It's not great for everything and neither is Go. You can find a bit more context on that in some of the other threads.

  • > defend the horrid JVM problems

    Such as? It's one of the most widely used platform for backend services, basically almost all top 500 company has some business critical infrastructure running Java. It surely can't have "too horrid" problems..

  • > Also memory safety is so far off base here, where's that coming from?

    It's coming from Go. In presence of data races on interfaces, slices or maps your memory might get corrupted.

    > Also why can't I have my memory back when it's not in use in tightly packed systems?

    You can. You have to either set your GC to be more aggressive or you need to utilize value types more.

    • The memory safety thing is just a moot out of scope contract. It seems moot to me every time someone shows up trying to push memory safety everywhere, that's a language to developer contract issue, not a functionality issue. When the contract of the language is such as that of Go vs Rust, the two languages are just offering different contracts. Rust just promises to hold your hand more than Go does.

      Regarding the JVM and GC. Good luck with that? Every Java application I've seen in the wild when I supported JVM seemed to never release any ram it allocated. Ever. If it used 1G and even after free, the JVM decided that was going to be used again and wouldn't release it.

      It would be hard to sell me on wanting to use Java again (people can pay me enough to do it, but I hate it). Which kinda sucks since Apache Foundation has a ton of really cool projects using it. Kotlin maybe, but I have no real use cases where it would be better than anything else I know right now.

      1 reply →