Even though Java may not be the trendiest programming language currently, it is still a powerful choice for many, including Netflix. There have been advancements for developers to make AI-infused Java applications as well.
Java is no more perceived as a legacy programming language. It has evolved over the years. And Netflix has pushed its stack forward—past JDK 8, beyond reactive programming, and new tech.
Paul Bakker, a staff software engineer at Netflix, shared insights about how they are using Java in his talk on ‘How Netflix Uses Java’ at JavaOne 2025. “A lot of people apparently are not so happy with Java. Some people never want to watch Netflix again because it’s tainted by Java,” he said.
Two Sides of Netflix, All Powered by Java
Netflix has two sides of a tech stack powering its operations. The first powers its global streaming service, a high-traffic system spread across regions where one request can fan out into dozens. For this, Bakker mentions that their approach is that, when something fails, a retry could solve it.
The second part involves Netflix Studios, which is enterprise-focused. These manage film production workflows — schedules, gear, people, and logistics. Here, data integrity is paramount. As Bakker put it, “If someone saves data about a movie being planned, that data absolutely needs to persist.”

Bakker stressed that Netflix’s architecture for both the requirements remains essentially the same, all powered by Java.
Upgrading The Backend Java Stack
Java Development Kit is the software development environment that enables developers to create and run Java applications. The migration to modern Java wasn’t glamorous, but it was necessary. The company patched the legacy libraries, got the services to use JDK 17 and above to step up a notch.
For anyone in the same boat looking to upgrade things, Bakker suggested, “Just fix it. It might look hard, but it is actually not.” He highlighted that they did nothing special here, but only upgraded. With that alone, Netflix experienced significant performance improvements.
“We got about 20% less CPU time spent on garbage collection,” Bakker noted. He emphasised that it was a big win for Netflix to achieve a 20% performance boost on their machines without any tuning, which is often a challenging process.
With JDK 21 and the introduction of generational ZGC, things improved even more: “We went from more than a second pause times to zero.” He highlighted, “Significantly fewer errors on our IPC calls.”
Bakker was quite blunt about REST and said, “I don’t think you should use REST at all.” He put forth the argument that GraphQL has more benefits comparatively for Netflix.
Bakker praised another new technology with the Java tech stack upgrade, virtual threads. He explained that they enable processes to run in parallel, giving them improved performance by default.
During experimentation, they encountered a few issues with it. However, he mentioned that a fix arrived in JDK 24, and Bakker’s team is confident that it will get better.
Relying on Spring Boot, An Open Source Java-based Framework
The streaming company works closely with the Spring Boot team, an open-source Java-based framework. Bakker explained that Netflix uses standard Spring Boot plus a curated set of modules that hook into Netflix’s infrastructure. There’s security integration, dynamic configuration, observability, and more.
He further explained that the migration from an older in-house framework to Spring Boot was a long, deliberate effort. Thousands of services were ported, helped along by automated tooling and migration guides. Now, most services use Spring Boot 3, and upgrades happen within days of each new release.
They’ve worked closely with the Spring team to shape the GraphQL support, and are cautious in adopting Project Leyden to improve the backend’s performance in the near future.
Bakker highlights that Spring Boot may not be flashy, but it’s familiar, battle-tested, and extensible—exactly what Netflix needs.
Goodbye to Reactive Programming
It may surprise some that Netflix, once the birthplace of RxJava, is now moving away from reactive programming. “Literally every API used to be Rx,” Bakker recalled. But over time, the complexity of debugging and maintaining reactive systems began to outweigh their advantages.
“My hot take is that virtual threads combined with structured concurrency is going to completely replace reactive programming,” Bakker said.
Today, Netflix only uses reactive libraries where absolutely necessary. For everything else, the stack has been standardised around synchronous code powered by virtual threads.
As structured concurrency solidifies in upcoming Java versions, Netflix sees even less reason to keep reactive code around. “We can finally live our lives happily,” Bakker joked.