I'm seeing recurring claims about exceptional JVM performance, especially when contrasted with languages like Go, and I've been trying to understand how these narratives form in the community.
In many public benchmarks, Go comes out ahead in certain categories, despite the JVM’s reputation for aggressive optimization and mature JIT technology. On the other hand, Java dominates in long-running, throughput-heavy workloads. The contrast between reputation and published results seems worth examining.
A recurring question is how much weight different benchmarks should have when evaluating these systems. Some emphasize microbenchmarks, others highlight real-world workloads, and some argue that the JVM only shows its strengths under specific conditions such as long warm-up phases or complex allocation patterns.
Rather than asking for tutorials or explanations, I’m interested in opening a discussion about how the Java community evaluates performance claims today — e.g., which benchmark suites are generally regarded as meaningful, what workloads best showcase JVM characteristics, and how people interpret comparisons with languages like Go.
Curious how others in the ecosystem view these considerations and what trends you’ve observed in recent years.
Golang has many advantages over Java such as simple syntax, microservice compatibility, lightweight threads, and fast performance. But are there any areas where Java is superior to Go? In which cases would you prefer to use Java instead of Go?
Videos
When is it better to use java over GoLang?
I have seen several performance tests that always give GoLang the fastest and least memory and CPU usage.
The question here is why should I or any company prefer using java over GoLang?
thanks
Background: I've been using Java for about 8 years and just started learning Golang.
So far, I'm in love with the language, and these are the top reasons:
More low-level control of memory. I hated how much the JVM's GC relied on the compactor. Objects can only be created on the heap and object arrays are arrays of pointers to non-contiguous locations in memory. Many like to say that Java has better GCs than Go, but that's because Go's memory model doesn't require such complicated GCs. It's also nice to have pointers in Go.
More paradigm-neutral. Java was designed from the beginning to be a language primarily for OO programming. Using Java for functional programming results in unnatural syntax and inefficient use of memory. Golang feels ambidextrous.
I'm still very new to Golang but as of right now, I even see it as a replacement for Node and Python in the areas of scripting and web server development. Golang's fast compile time closes makes it competitive against interpreted languages in terms of development speed, but 1-ups these languages because it gives the developer more low-level control of memory and has static typing.
In this benchmarking test, Anton the youtuber is testing REST API built using Java (Quarkus) and Go (Fiber). I always thought that Go Massively outperforms other compiled and GC languages like java and C#. But according to this test, go barely outperforms java api. This test uses Fiber which uses fast http which is faster than the standard lib net/http. The benchmark uses two tests: 1). A simple get api which returns a UUID as json 2). An api which fetches a file from local computer, saves it to amazon S3 and then saves metadata to Postgres. The 2nd test is closer to real world use case. I am studying go and could use your comments to know what could Anton do to further optimize his go app. I know a performance gain of a few seconds doesn't matter. I am just curious.
Recently came across this post on the other sub.
Java outperforms golang
I don't buy it because native code is literally machine code and anything else(bytecode) comes with overhead
I'm a student majoring in in CS and I'm interested in golang and learn it a little bit but I don't know what's the real advantage of it.
I think C# or java has better a framework now (for example Spring in java) and speed is fast enough.
and golang's orm isn't good so far.
If you guys work for company and use golang now, I want to know why you choose it.
** recently golang is frequently used in blockchain instead of C++. why?
Seems based on the sample code provided in the LINK, Go underperforms. Some interesting jvm optimization might be taking place.
SOLVED: The issue is that it was using 'int' and not 'long' in the Java code, which caused an integer overflow with high numbers, leading to the collatz function terminating incorrectly as indicated by the OP but java seems faster with a very small margin. LINK
Say you had several services taking in millions of requests a day, why would you write those services in go vs java. I have read through a few blog posts online but I am interested to hear what the community here has to say...
Edit: thanks for the responses. I realize the question may be a little vague but a majority of you were able to answer it thoughtfully!
I think it all boils down to what you, your team, and your company feel comfortable with. Assuming that everything outside of the service implementations is going to be the same for either language (monitoring tools, deployment services, CI/CD, logging, etc), then you have to base your choice on the libraries that exist for each language, and the support that exist for those libraries from either the community or a company.
Go typically has a smaller memory footprint and faster start up times. This can let you scale your apps faster and more efficiently if that's your priority. I have migrated quite a few apps from Java to Go. One thing to keep in mind I find a lot of the Java libraries to be more mature and better supported than the go equivilant. I wouldn't go through the trouble of migrating apps just for the fun of it. But new developement I'd lean towards Go unless it was something I could cheat and autowire with a few annotations in springboot.
Which language should you choose for backend development in 2024: Golang or Java? 🤔
Let’s compare their strengths:
Performance: Which one delivers better speed and efficiency?
Ecosystem: Libraries, tools, and community support.
Scalability: Handling high-load systems.
Ease of Development: Which one is more developer-friendly?
What’s your experience with these languages?
In the "binary trees benchmark" here http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=java
Go seems to underperform Java by quite a bit. Now I understand Go is much newer, but is there something in code (http://benchmarksgame.alioth.debian.org/u64q/program.php?test=binarytrees&lang=go&id=4) which slows it down or is it that the GC is still less mature than Java's?
I know it's just a game, but still...
Yes, it is memory allocator and probably the fact that bottomUpTree() is called a lot, recursively.
That being said, making sweeping statements (like "Go's GC is immature") based on a single benchmark is not exactly right. Both Go and Java have state-of-the art garbage collectors but they are tuned for different scenarios and this benchmark has a workload that heavily favors Java's GC.
Why? Because Java's collector is generational. That means that allocation is extremely cheap (bump of the pointer). The downside is that generational GCs use more memory and when objects are moved from nursery to tenured heap, there's additional work of copying the memory.
Go's GC is not generational, so allocation requires (comparatively speaking) much more work. It's also tuned for low latency (smallest pause when GC has to stop the program) at the expense of throughput (i.e. total speed). This is the right trade-off for most programs but doesn't perform optimally on micro-benchmarks that measure throughtput.
I've made a Go version that allocates nodes in bulk https://gist.github.com/kjk/4620bf60315d3fdd3f210e4590bdf1cb using a pool allocator of nodes.
On my machine it goes from 17s to 9s (if I allocate 1024 nodes at a time) or 7s (if I allocate 32*1024 nodes at a time).
In this particular program the number of nodes could be calculated up-front so it could be sped up even more.
Another thing where Java probably has an advantage is the fact that almost all the time is spent calling bottomUpTree() a lot, recursively.
Why is it worse than in Java?
To make goroutines cheap, Go starts each goroutine with very small stack (~4kb). As a result, Go has to expand the stack when needed. Go does that by checking stack size at the beginning of every function call. When it detects it needs more stack, it creates a new, bigger stack and copies the old stack to new one.
The cost is usually very small (few instructions for each function call) but if there is a function like bottomUpTree() that does little work and is called very often, even small cost adds up.
Additionally, this is deeply recursive call, so stack is being copied several times when it needs to be expanded.
I'm pretty sure that if you rewrote bottomUpTree() to be non-recursive (non-trivial but possible) and used pool allocator for nodes, Go version would be as good (if not better) than Java.
The Alioth shootout is Lies, Damn Lies, and Statistics material. The results are — generally speaking — non-deterministic (e.g., suboptimal runtime settings on JVM that lead to non-repeatability) or specious (e.g., measuring the performance of Go, Ruby, or JVM callouts to native C libraries). I wish folks would quit citing them and formally label them harmful; they lack methodological rigor.
Hello experienced dev community,
I have 6 years of front end experience at big tech, start ups, as well the bank.
I want to transition into full stack or backend development , therefore I will be starting to learning backend tech stacks outside of work hours.
My friends suggested either Java + spring or GoLang. Apparently Java has the most mature platform and best overall supported ecosystem. As well, from landing a job perspective, most enterprise uses Java. However, he said golang is getting popular and the golang community is very motivated, although Go is utilized to write dev op tools like Terraform.
My goal is to intensively study and build a decent backend heavy project and hopefully transition into full stack / backend developer roles in 6 months.
Should I start go all in on Java?
I'm looking for recent articles clearly explaining the performance differences between Go and Java/Python. Can anyone point me in the right direction?
I've started to learn Java mainly because Android development is based on it. I'm not really familliar with it, but I've a c++ background that might give me some ideas. What I'm really looking to know is where I should use Java instead of Go. There's some fields below that I'm interested in and wanna hear your opinions as well:
a) Mobile Development
b) Web Development
c) Games Development
d) Scientific Development
e) GUI Development
f) New field..
If you're familliar with both languages and wanna give me your opinion would be awesome!
Note that I'm not looking to switch or give up one language in favor of another, but wanna learn to use them where they fits the best.
Hi Gophers!
At my current job we are going to make a pretty big project that will have a lot of requests from all the country. We don't know if Go is better than Java with Spring for this case. Don't think on knowledge of programmers of that techologies, just think on performance and development speed between that technologies.
Thank you!
For development speed I think Go wins - but despite you asking not to bring it experience is still a factor there. In terms of performance I think both will be fairly similar, the JVM is incredibly well optimised and can handle running very high throughput web services.
Out of the two, I would genuinely pick the one your team has most experience with. If you're thinking about building a team, Java may be easier to build a team for too because plenty of people know Java, whereas finding Go developers can sometimes be a struggle (or at least, that's been my experience so far).
The biggest difference is likely to be memory usage. Java gets performance by using tons of RAM. Hello World as a Jakarta EE app is at least 160MiB, whereas a Go version is less than a tenth of that. If you're planning on deploying to a cloud environment, memory costs and ease of deployment can be major reasons to pick Go.