JCON EUROPE

Approaching the JDK 25 LTS release through real-world migration | Wolfgang Weigend (EN)

52:39 · 20 Apr 2026 – 23 Apr 2026 · YouTube

About this talk

In this talk, the speaker discusses the process of Java migration, especially focusing on newer Java Development Kit (JDK) features relevant to migration. He shares insights from his experience within the global Java team and emphasizes the importance of long-term support (LTS) releases for migrating applications, highlighting the benefits and performance improvements seen in versions from JDK 8 to JDK 25. The speaker covers significant changes in Java, mentioning tools such as the Java migration guide and Java almanac that provide checklists for developers. He explains migration strategies, including the use of the zero garbage collector which significantly reduces memory utilization and improves performance for applications like Uber's data analysis systems. The session concludes with an overview of modern Java features including project Loom for lightweight threads, project Panama for foreign function memory access, and project Amber for data-centric programming.

Full transcript

Hi. Hello. My name is Wolf Gang and um great that you all showed up at this time during the day 5:00 pm. Yeah, I really appreciate this. Uh and um otherwise I had be here alone in the room. So thanks again joining us. Um I I put a lot of material here in in this talk and so we we can adjust it and and please raise questions

directly if you want to. Yeah. Uh this is a talk about migration and mostly stuffed by the Java features the relevant features on my perspective what I absorbed from from my my personal Java journey. Yeah. Um maybe some words. I'm in the global Java team uh working um in in Europe for um customers uh Java migration issues whatever formally I uh worked with growvm. Yeah. And now

we concentrated more on the JDK stuff. So this is from customer experience uh migration work. Yeah. And a lot of uh feature setup you might need to consider for migration. 30 years of Java we celebrate this last year and it goes on. uh I have u uh roughly step over to the JDK releases from 17 to 26 but mostly for these kind of projects I recommend the

long-term support releases the LTS releases. So who's using JDK8? Oh, and at JDK 11 and 17, 21, 25. Okay. And that's that's the curve from Gaus we see here. Exact. So I have some um considerations here. The JDK migration guide and this is a practical usage. If you really want to have a checklist, it is there. You can use it from 8 to 25 or from 8

to 11 stepwise from any release to the latest greatest Java LTS release. Yeah, this is a written document. you can use it or you can feed your um AI tool with it but it's almost ready and uh so you find it well documented and all the significant changes between the releases are documented in the migration guide for individual releases coming from somewhere below and of course on

the API level There are uh tool links checklists around which you can use. Uh this is for instance the Java almanac who who is aware of this question you're not this is Mark Hoffman Zurish he's maintained this with uh um Kai and uh at least a tooling a code tooling how you transfer your existing framework like what we heard before from Spring tools or spring boot how

you migrate this. Uh this is at the end but before coming this we made of course hopefully most of you these uh journey and picked some useful uh APIs and chaps on this and some joined later uh and did not need to um look at the the early uh days how this evolved. Um I think the uh usable um parts of Java evolved in in the past

decade. Yeah. Who's using lambda expressions in your application? Almost all. And uh this this was JDK um uh in JDK8. Uh this was um yeah 12 years ago. uh and uh there there were lots of doubts how could you use this uh now it's it's almost in any application uh included and how how would we rate features does they fall from somewhere down to the JDK no

uh it it was opened up yeah within the open JDK it's it starts in in 2006 yeah and and and it evolved more and more um at Sun and uh even more with the acquisition from Oracle and uh who's aware of the uh JVM language summit in Santa Clara in California there's a language summit all the bright people are invited to present their opinions about programming languages

and uh Java learned a lot of this um group yeah because they shared their experience like the lambda expressions from Scala in the in the in the past. Yeah. though lots of things are discussed um many years before before they came into Java and they uh they discussed in a larger group at a constants level at the open JDK of course with um the the engineering stuff

yeah from the team but it's not Oracle alone it's the whole community that that's we developers decide how to use a feature and um they have an a certain demand what uh and the thinking what should be in a language. The the lightweight um uh framework with green threads uh virtual threads how you use it. This is a um um a modernization and maybe something as an

alternative for reactive programming. uh you have something in the language which is maintained automatically by the JVM itself. Uh and this is a total difference uh between u operating system threats where they're more related to um course processing and the hard work in the back end. uh and though the language evolve and brings in new stuff and uh I have an example later on for zero garbage

collector where we came down to sub milliseconds yeah to stop the world pause time yeah instead of running seamlessly this helps larger applications really um tremendously and all the um different things came into to Java maybe were proven somewhere else. Yeah. And and Java absorbed this. Yeah. Yeah. Maybe you saw this um slide as well at Anna's talk and Java itself as a an objectoriented language transforming

more to a datacentric language and uh this uh is how we sorted the um um the titles of the larger projects. Yeah. on on as a topic and then we located below these topics uh for for instance datacentric approach with project amber and and the different features uh underneath. Yeah. or uh what is relevant what we think all for for uh cloud consumption better better consumption if

you use something which is self optimization capable like uh the project loom the lightweight threats and all the other stuff where we need to uh align foreign libraries with foreign code foreign memory foreign um um programming languages to bring it into Java to work in one environment. Yeah. With an a clear u set for the memory and the threats inside Java and not to break it from

from outside to uh shut down the threat with a C program from from outside. uh and uh newer um initiatives like uh project Barbon what our colleague uh is working on with the um um initiate at reflect then you can uh obtain foreign uh code whatever it is uh should be the library based uh C calculator or whatever and and this will be more and more relevant

in the future of course and uh project leiden learned a lot of it's a static image in more or less and uh who's aware of yeah and this come in in a different way to to Java to the JDK that we need something which is directly um built in that uh JDK so let's go to um a real world migration case like u um the uh releases

here uh you where Java itself improves release by release and if you uh step up just on LTS releases you might have five 10 or more percent improvements on performance on uh better uh memory uh consumption that you save more on on your resources and each release will be better. So there's a reason why we should migrate. Yeah, of course you can freeze your JDK8 application. Yeah,

you have much more lines of code and with latest greatest versions you have less lines of code normally because the infrastructure is getting better within the APIs and the performance is better and you lower the memory consumption and uh the memory uh goes goes down. Yeah, it it will be better with with each uh release. And I have the example from the Uber company. It's from the

previous Java one, not from this one. This one was a was a different uh example. Yeah. But I I find it uh useful because most of of of our uh population uses Uber. Yeah. And right after the trip, you uh can rate the trip. Yeah. Can give you the tip. you're you're um detected as a person who is paying this trip and you can rate it and

this is uh just um an online um analysis with Apache Pino. Yeah. And this is runs uh through the whole uh stack on on Java that the whole uh trip data flow yeah uh is is really covered yeah worldwide where where this exists and they they use for this analytics uh on Apache Pino their their whole tooling and they need to have a very high latency P9

latency that almost everything uh is deterministic and um clear that the the answer is immediately there though they run from um older and uh changed to the JDK 21 uh with gener with zero garbage collector and want to improve the performance on their queries and the latency reduction was about 50% uh on uh P95 in this case and the processor reduction was about 50% yeah 50% that's

a a tremendous saving and even the me the memory utilization uh was down from 20 to 50%. This is a a huge saving if if you uh pay off for for cloud consumptions or even if you have an own uh data center or hybrid uh architecture. And this was shown where they run. It's it's hard to see. These are the red small red uh little parts here

where they say cluster one 2 3 4 5 six. And these little red uh parts um are started with with all the clusters and at the at the right end here. Yeah. uh um you see that uh the the processing uh consumption goes down by by 50%. Yeah. And the memory uh consumption utilization is even better here as well up up to 50%. Yeah. And on on

the on the top level the the lines go down after the last uh cluster uh is on in production you have the the complete uh latency in average uh decreased by 50%. there's no argumentation against a migration, an upgrade. Yeah. Uh because you save just with the garbage collector uh so much uh of your resources that is worthwhile to migrate. This was my um best example uh

on on this how you how you save resources. We now at the release uh 26 yeah with with features but for for our road map we step from LTS releases uh which are ongoing and between the releases they are just there for six months this is after the new uh release cadence six months uh you can wait for it's a timebased determin deterministic upgrade. Yeah, there are

no surprises like in the past. this is a clear road map then you can you can have your your schedule and you can rely on this and of course it's related with the assembly of the ideas for an JDK enhancement proposal how to evolve the language and in the past with uh JDK uh 67 yeah before you have maybe unpredictable time of three, four, four, five years.

Yeah. And then a bunch of features, these jabs. Yeah. And this is impossible at once. Yeah. To just implement this and say, "Oh, here's our our administrator team. Here are is our migration stuff." Yeah. Just go on to the next release. This is impossible because the developer must be involved in new features very early long before. Yeah, they need to see all the releases and the early

access releases up front. Yeah. And then after the new release cadence six months, you have a decent amount of possible features you can implement stepwise and not hundreds or 90 or 50. Yeah, you have almost 10 to uh 20 maybe. Yeah, but you choose not every application needs all of them. Yeah, you need to choose you try what could be helpful. Yeah. And in nowadays you could

ask for help. Yeah. Is what would you recommend for this? Yeah. And then you can uh choose it and implement it. the the road map here um um very important that if someone has really good reasons to say no we don't touch our uh JDK8 uh application for for whatever yeah uh you can uh it it is supported yeah um after 10 years there's a statistically um

possibility of unknown bugs uh goes down. Yeah. So and uh of course there are other reasons like compliance uh and and so on to do this. So 25 is the next latest LTS release and the time between uh goes down from three years to two years. This was a customer uh request that uh people said no no we want to have it two years yeah uh in

in a two-year time frame and not three and uh by the way u you can always use the download of these releases and uh you have the note um the NFTt license no fee terms and conditions and this is for free so you can produce the um Oracle JDK uh under the free license the NFTC license for three years and this is an overlap of one year

and then you can step up to the next and this is a very secure way that you don't uh find any uh who Java FX is is here um u the UI technology Y uh came came to to Java as strategic at Java 1 and uh it got a commercial uh license as well because many many people asked in the past. Yeah. Why uh is Oracle working

on on Java FX and and don't u uh sell it to someone with support? Yeah, we need support. Yeah. and uh we we can't get it. Yeah. And this was a reason I I uh take care about the Java ethics community uh here in in Europe. Yeah. And uh this this was a major thing for me that uh we we can provide uh a clear uh strategy

and for Java FX and all the stuff which came up from AWT to swing uh to Java FX they are now in in a in a good shape that there is a road map. Uh and I saw in the in the morning um the presentation from the insurance company from DE VK here in Cologne and uh they they mentioned uh Java uh isn't uh JavaScript or TypeScript.

Yeah. And and that's that's a a big thing because uh in in um significant areas of business you might need uh a proper user interface what you can control from a single language uh for instance. So and this is the purpose of Java FX that you you you are in one language and you can all use all the features and the same is for for the UI

technology it's built in it's one language it does not break yeah and for uh maybe for web projects you don't have a road map you you never have the same team after after six weeks or three months yeah but we have uh lots of applications uh uh which have uh a clear strategy they need to be maintained. Uh and just just to to consider that was the

reason I put it here. If someone wants to migrate uh swing u windows in in his application uh please u you you can you can talk to me and um we we help for uh a migration of these kind of stuff. If someone uh uses is here someone using swing heavily. Okay. Yeah. So Java FX is an option. Yeah. To migrate it to new stuff. Yeah. And

still to stay in a central language. So now we go on um we with the the fast track uh from 17 to 26 of the release features. So I mentioned before features don't fall from from the sky. uh they were discussed from bright people in the open JDK and always trying these ideas if they are worthwhile to implement and this is how we work from incubators to

prefuse once a feature is final and if a feature is not uh really appropriate yeah we can we can draw it back. Yeah we can change it. Yeah, because this is something why should should be something in a language what no one needs to to have in his application. Yeah. It's it's it should be a a need where or a demand Yeah. from from outside. Yeah. Where

we can we can do things better. Yeah. And uh just to um see the start of the the garbage collector. Now uh garbage first was a major step before uh with throughput collector or CMS um um we had a maybe 20page list of tuning parameters and each application were different and this was more and more funneled through the garbage first approach with with uh larger memory regions.

Yeah. and uh to to something which really is is possible uh that all the benefits for um huge heaps are possible to clean up. Yeah. And and this was was the approach for the for the zero garbage collector what Uber use in production. Yeah. And at that time from from JDK 115 down to 17 we saw the trending. Yeah. That it was better and better and uh

we we did not stop at that time. But think about a company like like Uber they really choose 21 for production. Yeah. So these are many releases below and the technology is evolving improving and they must be production ready otherwise I would not recommend this for usage in a real project. Uh so it has been there and uh 21 uh was uh the the major breakthrough for

for this release. Yeah. and it just shows up the the uh parts now I'm I'm walk through with with 17 it's it's just five years um away from us in the past yeah where we we see uh sealed classes the pattern matching uh some changes in the language yeah a lot of housekeeping stuff stuff for the language itself for day-to-day programming yeah And um the vector API

is still an an incubator in the latest release. Yeah. With with um 11's um uh preview. Yeah. The vector API for example. So if something is not ready or not really feasible to use it, yeah, why should we bring this into a release? as it must really be clear that it's usable and it does not break. Yeah. And uh of course yeah you you see some certain

uh effects in in a different way of production. Yeah. That that's for sure that's almost possible. Yeah. But um the probability that something occur which really did harm uh is is very low. Yeah. And though you need to proof it and um by the way it's always always more difficult uh to remove things from the JDK uh instead of bringing new things. It's easier to to bring

new code into into the base of of the JDK uh instead of remove things. they should not break other things then because this is a the biggest advantage that Java is backward compatible. Uh and though it moved up um different uh health insurance um uh software company uh used the at UTF8 yeah by by default. This sounds small issue. Yeah. But uh German namings uh are different.

So you need exactly to find the same record again and again and not uh names with uh 100 uh times uh duplicated uh and they are different. JDK 19 uh foreign function foreign memory API evolved vector API as well. Yeah. and though continuously work on on these APIs and uh scoped values. We saw uh today uh an talk here from um ING Bank where they they used

an example of lightweight threats project loom uh with scope values and these kind of things. this it's there it's in the uh enterprise industry included yeah virtual threats uh came to production um to general availability in JDK2 the record patterns and um language improvements and um some things they they came in were discussed and uh going back like uh string templates. Yeah. So it's possible really to

to get the power um sorts of developers to the complete open JDK team and discuss it and say is it useful or not we can change it together. This is just a a map of uh what what I show uh always in this case how uh the language features really go through the releases and the teams evolve and getting better to get the best out of it

until it will be part of a particular JDK. The vector API is most important uh for uh treating um the um whole AI stuff or foreign uh libraries. Yeah. Why is it because we can approach specific processor architectures? Yeah. And uh this is project Panama with with a different hardware. If you think about uh Nvidia GPUs, yeah, you need a different approach like for for Intel processors

or for um Apple silicon whatever. What what does it mean? Um if you see the uh number of multiplications, additions or assignments, it goes uh line by line but uh it goes um separate. Yeah. And if you have a a single instruction multiple data like like a a real processor works with you can add this work blockwise. Yeah. And you have only one uh instruction with multiple

data and one addition and one assignment. Yeah. As a as a block data. It's a simple principle. Yeah. uh but uh it's hard to implement and this is the reason why the the whole stuff is so complicated uh and underneath the the foreign function and memory API uh needs to be there uh not only to get rid of JNI calls. train is is complicated of of course

and can always cause uh your threads um crash. Yeah, something like that. And it would be of course easier uh to obtain some data from the outside and have it in the Java uh memory system in the in the heap in the whole stack uh in one environment that not uh a misleaded location in C uh point to nowhere and crashes your thread where the Java thread

is is running. And this is more convenience. Yeah, even JDBC drivers um using are basically uh work with JNI. Yeah, that is as expert knowledge on this side and it could be easier if we can securely allocate foreign memory and man manipulate these and access the whole structure. Yeah. and and control it without any side effects. This this is really u a key point. And with u

the Java native interface, you just call it. Yeah. And uh it it come came back uh to the class method, but you you can't uh go in this red box. Yeah. For an example is an insurance um and calculator. uh for the amount of of your insurance. Yeah. It cames from outside maybe with C++. Yeah. But your whole application uh for the insurance uh internal sales Yeah.

or the distributors are written in Java. Yeah. And this is of course easier if this is in in in one uh environment. Yeah. without J&I. Yeah. Then uh we have a tooling here which made some glue code. It's called J extract. J extract is on jdkjava.net. It's a separate tool. It's not part of the JDK. It's outside. And on this website, it's the same website where you

can get uh early access releases. Java ethics. J extract is even there. Yeah. J extract itself works with JDK22. Yeah, you don't care about this. You can work with the latest greatest because it's just a tool and it's about 75% of the work. Yeah, if you transfer the C header structure to Java, but you need to do something uh manually. Yeah, you you don't have a fully

automated uh migration on on this foreign structure. It's just an example. If someone touches these kind of things uh foreign function memory API and uh J extract there are a lot of stuff there to help you. Yeah. uh JDK22 um a re release between uh ongoing work um 23 we're getting closer uh here uh with lot of housekeeping work from the language but performance still optimized with

a zero garbage collector generational mode by default. Yeah. and um other stuff uh specialtity we we discussed with with a colleague class file API there only a few yeah uh ASM tools bite code manipulator they're not so much this is not the daily work of of enterprises with their developers yeah you rely on this that this is possible yeah and this works perfect you don't read bite

code uh hope Not and uh we have a language where we read the syntax of the language as source code. Yeah. And uh but there's a lot of stuff you don't see but uh it need to be um optimized that it's it's fast and reliable. Yeah. So uh we're getting closer with with uh 24. um that was um here uh one one just one example in the

in the middle it's uh 450 it's the compact compact object uh headers yeah there's a lot of optimization if you look into yeah we have uh one one uh colleague here Swen Wman uh he he did a lot of uh stuff and recommendations how you can um get little performance improvements and even one more argument for moving up migrating an application to higher versions. Yeah. So 25

uh is that what what I would recommend for most uh projects now because the benefits are are really good and you have all uh the the things where where we run through um in in that uh time. And uh you find here uh a lot of uh performance improvements and early um techniques from project Leiden the uh ahead of time uh command line uh econom e economics

and uh some some uh improvements here. Yeah. And of course who's aware of the JDK flight recorder profiling tool? It's it's very helpful because at the same time uh you can you can watch the application and the JVM at the same time and and you can uh dig into hot methods uh memory consumption where you lose something where you lose time uh where where something is is

broken. Yeah. And and memory uh really absorbed by by these uh things. performance I mentioned this compact object headers it's just there it's it's a lot of maintenance uh underneath yeah in the JVM itself so these architectures are approaching better to the language that we don't waste any uh word length yeah in the the internal uh architecture representation monitoring. I can recommend this for migration uh the

the JDK flight recorder. Yeah. Uh with the um mission control, it's a it's a tool outside. You can see it, but you can uh even uh look into with VMstead and uh and uh visual VM, sorry, visual VM and you can uh look into these flight recorder files. they are optimized that uh you can uh really uh analyze it. Yeah. All the stuff um uh profiling stuff

for a flight recorder uh sampling. Yeah. uh in in a in a larger environment and uh method timing and tracing. There are a lot of improvements and that this might be useful to have the profiling tooling before a migration and afterwards and you can exactly they say where are the gains where are the improvements after a migration. Yeah. And during a migration what should I change uh

in my business logic? Yeah. Though um another thing is uh linking runtime images without Jmods. The JDK itself has has a modules. Yeah. Since JDK9 and no one uh would use them. Yeah. In the past. Yeah. But what is it? Yeah. It's just uh internal housekeeping. Yeah. But now you can shrink down the footprint of of the JDK itself. Yeah. Uh to 35 megabytes whatever or smaller.

And u this is useful that we could carve out things like Java FX it would was carved out at 11. Yeah. And now with a tool JLink you can put things uh together to your uh image representation of the JDK. Uh and this means this is not just an exercise to decouple the JDK. Uh now it's possible and interesting after all these years to have SDK or

Jmods. uh then you can you can use um this you we will see in the next uh slide uh I did this with uh JDK 25 now we have uh since this week 25.03 0.3 uh security update. This was Tuesday this week. And if you look into um the uh the this uh JMO uh thing uh the naming is is a little bit uh tricky. Linking runtime

images without Jmods. Yeah, you link something you choose. Yeah, you need of course you need to know what kind of module do I need, but this is all in the JDK. Yeah, and if you use the tool JLink, you pick your needed modules. And this is the explanation for the name without Jmods with your selected modules. And if I link one uh for instance with JLink I

add my modules and I did this example exercise uh with Java FX. You you get here um in this release the warning that there are some incubator modules with uh incubator technology in Java FX itself and then it would be created in that image. Yeah. And if you look into the image with list modules, you see okay, these are the the red in the middle. the uh

Java base FXML. Um these six from Java FX under base are there and the two uh with uh um mark uh as as input and rich text improvements in Java FX. Yeah. So you can create your own image and shrink it down. If it runs through a CI/CD pipeline and maybe maintained in a in a Terraform environment wherever it must be agnostic no surprises should occur. Uh

but you need to control it on a certain way. I I just show it on on the command line. Uh of course uh it will be then automated project liden uh the static image in in the JDK uh should be have hopefully some time the same effect uh like we have before reached with growvm. Yeah. Uh ahead of time method profiling and we see here uh in

the first step with AOT cache output. Yeah. We we train we manually orchestrating and train the cache and create it uh during creation and then in the second step uh we we read from from the cache we do a deployment run. This is JDK 25. It evolves very fast because we want to add this capability that um the image would be faster and faster and uh and

and u just uh an application uh should be shrink down uh like uh spring boot. Yeah. In some uh milliseconds to pre-spawn and and restart for instance. analyze your dependencies. Of course, it's uh backward compatibility, but you should use JDEPS as a tool from the latest version, not from from uh JDK1 or 17. Yeah, you need to check where does it come from. Yeah, they had different

information. So, use JDEPs. If you want to migrate to 25, use JDEs from 25. and you see uh do I have any private APIs or any violations? Yeah. Or uh am I in good shape? Then I can do it seamlessly. There are some um documented restricted meth methods. Um Java JDK miss got unsafe. You don't should not use these kind of things. But you find it in

the open. Yeah. You find it out. Yeah. And maybe something there. You need to check it. Are there any restricted uh methods? We will step over the 26 methods. Uh there are only a few uh improvements ahead of time is improving. HTTP3 is there for HTTP client could be helpful in the future. Yeah. And throughput uh improvements for garbage first. Of course, early access releases for the

new projects. Yeah. JDK 277 early access release. This is all there and it's on that page I recommended jdk.java.net and you find all the projects and the latest improvements. Now we came to the first look into um with with the tooling. In the migration guide you feel you in the migration guide you see all the significant changes documented. Yeah you you can feed a language model but

you can really use it. Yeah. And can uh rate your application requirements. What should you do? You do security updates. What's what's going out and uh be prepared. Yeah. from any release to the latest. Yeah. From 8 to 25 for instance. Uh first just run it. It must run. Yeah. Uh then uh JDEPs and in the latest uh step. Yeah. Uh you be prepared to recompile it.

Then you have new features. Yeah. And there's a uh a second way. It's migrating on APIs. So we came from a second way. It's the uh Java Almanak from Mark Hoffman on Kai Osman. He was here as well. And uh you can you have a simple matrix and you jump in your target release on the left. Yeah. And you choose uh with these three dots. Oh, it's

JDK8. And then you get a documentation security manager is is out of this. Yeah. Applets are gone. Some parts of AWT are out of but you have a second checklist. Yeah. What expect you? And the last one what should I do with the whole code? Yeah. Um code migration open rewrite is a great tool. Yeah. And uh we have really good experience. Um especially if if you

have uh frameworks like Spring Boot, you you can get it in a large system for for instance an insurance system running on Spring Boot. Yeah, this is really feasible. uh in some days to shift it over to migrate it to higher versions. Yeah. So, uh you know what what you programmed Yeah. from from your uh source code uh the tool uh use the abstract syntax tool with

with with the source code representation. Yeah. and the lossless semantic tree where the code is represented in a tree uh with all the attributes and the format itself. Yeah. So this this is uh a huge win that you can control the meta data and this tool uh is able to provide recipes and u change these recipes but normally you find a starting point where you can approach

existing frameworks, languages, frameworks and uh my my best example is really spring boot. Yeah. And though you have a clear uh tooling support for migration to uh get some advices out of the tool, it's supported uh with with Maven Gradel. Yeah. Or uh the the CLI from Mona itself. And here's an example from 8 to 21 what uh you you could do. and uh you get this

um clear uh stepwise concept provided in the tool and it will uh if if you confirm uh it will change and replace this. So recipes are there uh for JDK25 migration and dump parts I mentioned here a security access controller uh security manager them things are removed from the JDK uh they care about uh itself so I don't want to overspend your uh uh time um I

hope this was helpful and uh please consider you can be part of the open JDK your company. Yeah, you can you can do more and uh it it will be recognized uh from everyone because it's one community with the open JDK and uh I hope you enjoyed this late talk. Thanks a lot.

From event

JCON EUROPE

20 Apr 2026 – 23 Apr 2026

All event videos
Back to Watch