[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-7AiyyA6QljMQfiz-457NI4zsa4qvDLyDyVpCdqYYLuI":3,"sanity-D1ze0igvR1iAOLGAd8Z0SPQHuiyI_S7CGqnByUr0XjA":476},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":451},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"d52b334e-4233-4e7d-a10b-bfba1472c2fb","2026-07-07T07:40:00.000Z",{"_type":10,"current":11},"slug","agent-orchestration-is-so-two-years-ago",null," Agent orchestration is so two-years ago",[15,21,27,33],{"_id":16,"publishedAt":17,"slug":18,"title":20},"eb5b66eb-9410-4329-83bb-22bbff39402a","2026-04-28T13:00:00.000Z",{"_type":10,"current":19},"turn-scattered-knowledge-into-trusted-intelligence","Turning scattered knowledge into trusted intelligence: Stack Internal 2026.3",{"_id":22,"publishedAt":23,"slug":24,"title":26},"369c2401-b62e-4a37-8ff8-bf603023ecad","2026-03-02T15:03:00.988Z",{"_type":10,"current":25},"what-s-new-at-stack-overflow-march-2026","What’s new at Stack Overflow: March 2026",{"_id":28,"publishedAt":29,"slug":30,"title":32},"5e9053a4-07ea-447c-91ea-29e0b6228537","2026-02-02T15:00:00.000Z",{"_type":10,"current":31},"what-s-new-at-stack-overflow-february-2026","What’s new at Stack Overflow: February 2026",{"_id":34,"publishedAt":35,"slug":36,"title":38},"a1b538eb-a8a6-46d0-80a1-ac70ec9bb935","2026-01-05T10:00:00.000-05:00",{"_type":10,"current":37},"what-s-new-at-stack-overflow-january-2026","What’s new at Stack Overflow: January 2026",{"_createdAt":40,"_id":41,"_rev":42,"_type":43,"_updatedAt":44,"author":45,"body":61,"comments":420,"dateUrl":421,"excerpt":422,"image":423,"legacyBody":426,"product":12,"publishedAt":429,"slug":430,"sponsored":12,"tags":432,"title":450,"visible":420},"2023-05-25T09:39:15Z","wp-post-16389","XzVcPPDfPNmxxXS3zvEUXb","blogPost","2025-10-31T17:26:54Z",[46],{"_createdAt":47,"_id":48,"_rev":49,"_type":50,"_updatedAt":51,"avatar":52,"employee":57,"name":58,"slug":59},"2023-05-23T16:27:18Z","wp-author-226","dgl3SCUzppW3U2LvCoOzcS","blogAuthor","2023-06-20T15:05:06Z",{"_type":53,"asset":54},"image",{"_ref":55,"_type":56},"image-56688f6337dd0a96034dfc998cdecc7810597d81-1024x1024-png","reference","current","Ryan Donovan",{"current":60},"rdonovan",[62,66,77,85,105,113,122,183,199,226,242,265,273,281,300,326,341,356,364,403],{"_key":63,"_type":64,"markDefs":12,"url":65},"da5d59001af8","embed","https:\u002F\u002Fart19.com\u002Fshows\u002F2355b740-4531-4071-a3ab-5907a95a36d3\u002Fepisodes\u002F64659e7e-8a91-46eb-91c0-1dc0003efe74",{"_key":67,"_type":68,"children":69,"markDefs":75,"style":76},"032bc2da57eb","block",[70],{"_key":71,"_type":72,"marks":73,"text":74},"032bc2da57eb0","span",[],"My first experience with Java came in my second computer science class, Fundamentals of CS. The intro to programming course used C++, and was my first programming outside of BASIC. With the intro course, I learned loops and logic, variables and function declaration, memory allocation, and basic objects and classes.",[],"normal",{"_key":78,"_type":68,"children":79,"markDefs":84,"style":76},"b80f9de91380",[80],{"_key":81,"_type":72,"marks":82,"text":83},"b80f9de913800",[],"After that, the CS department at CMU decided to switch to this brand new programming language, Java. It ran on any platform, which was great because the primary CS clusters were Solaris machines (a Unix variant put out by Sun). This was back before everyone had a Mac laptop that was also a Linux box. But it introduced me to a whole mess of other language features: threads, garbage collection, AWT (the abstract windows toolkit), exceptions, and object oriented programming.",[],{"_key":86,"_type":68,"children":87,"markDefs":101,"style":76},"b2dc53c92f22",[88,92,97],{"_key":89,"_type":72,"marks":90,"text":91},"b2dc53c92f220",[],"Since then, Java has gone through roughly fourteen major feature releases,, transitioned between stewards with Oracle’s purchase of Sun Microsystems, ",{"_key":93,"_type":72,"marks":94,"text":96},"b2dc53c92f221",[95],"663d99758c92","open sourced the code behind the language",{"_key":98,"_type":72,"marks":99,"text":100},"b2dc53c92f222",[],", and spawned several languages that use its virtual machine, including Scala, Clojure, and Kotlin. Personally, I’ve worked for several companies that built complex products on Java, whether they were embedded in browsers, installed in desktops through WebStart, or behind the scenes in a service-oriented architecture backend.",[102],{"_key":95,"_type":103,"href":104,"reference":12},"link","https:\u002F\u002Fopenjdk.java.net\u002F",{"_key":106,"_type":68,"children":107,"markDefs":112,"style":76},"04d8e6279a03",[108],{"_key":109,"_type":72,"marks":110,"text":111},"04d8e6279a030",[],"1995 to 2020—that quarter century is saw the rise and fall of several epochs in the tech industry. I asked Georges Saab, Vice President of Software Development at Oracle’s Java Platform Group what changes to Java made the most impact and what upcoming features he believes will have a real affect on its future. Here’s some of the features that Saab feels made the language proliferate and a few that will keep it enduring.",[],{"_key":114,"_type":68,"children":115,"markDefs":120,"style":121},"d8e682b543bd",[116],{"_key":117,"_type":72,"marks":118,"text":119},"d8e682b543bd0",[],"High impact changes",[],"h2",{"_key":123,"_type":68,"children":124,"markDefs":174,"style":76},"cfcea9cbaaa9",[125,129,134,138,143,147,152,156,161,165,170],{"_key":126,"_type":72,"marks":127,"text":128},"cfcea9cbaaa90",[],"The very first feature that made a massive impact wasn’t a change in the Java language at all. It was the ",{"_key":130,"_type":72,"marks":131,"text":133},"cfcea9cbaaa91",[132],"strong","vastly improved library support",{"_key":135,"_type":72,"marks":136,"text":137},"cfcea9cbaaa92",[]," that happened in the early releases. Between 1.0 and 1.3, these libraries included the ",{"_key":139,"_type":72,"marks":140,"text":142},"cfcea9cbaaa93",[141],"6a51abe6a27f","Swing",{"_key":144,"_type":72,"marks":145,"text":146},"cfcea9cbaaa94",[]," window toolkit, the ",{"_key":148,"_type":72,"marks":149,"text":151},"cfcea9cbaaa95",[150],"c033a23f5074","Collections",{"_key":153,"_type":72,"marks":154,"text":155},"cfcea9cbaaa96",[]," framework, a ",{"_key":157,"_type":72,"marks":158,"text":160},"cfcea9cbaaa97",[159],"339b9472a3da","RPC-like API",{"_key":162,"_type":72,"marks":163,"text":164},"cfcea9cbaaa98",[]," for remote calls, ",{"_key":166,"_type":72,"marks":167,"text":169},"cfcea9cbaaa99",[168],"527cc38f16dc","JDBC",{"_key":171,"_type":72,"marks":172,"text":173},"cfcea9cbaaa910",[]," for interacting with databases, and more. The standard libraries grew richer, more sophisticated, and allowed Java to become a real enterprise language.",[175,177,179,181],{"_key":141,"_type":103,"href":176,"reference":12},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSwing_(Java)",{"_key":150,"_type":103,"href":178,"reference":12},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJava_collections_framework",{"_key":159,"_type":103,"href":180,"reference":12},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJava_remote_method_invocation",{"_key":168,"_type":103,"href":182,"reference":12},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJava_Database_Connectivity",{"_key":184,"_type":68,"children":185,"markDefs":198,"style":76},"daa8e0fee5c5",[186,190,194],{"_key":187,"_type":72,"marks":188,"text":189},"daa8e0fee5c50",[],"In 2004, Java added ",{"_key":191,"_type":72,"marks":192,"text":193},"daa8e0fee5c51",[132],"generics",{"_key":195,"_type":72,"marks":196,"text":197},"daa8e0fee5c52",[],", which allowed types, methods, and interfaces to be specified with the associated data types to be specified when that item was instantiated without sacrificing type safety. “At the time, generics were a challenge and people had strong opinions about them,” said Saab. Today, generics are one of the enduring features of the language.",[],{"_key":200,"_type":68,"children":201,"markDefs":223,"style":76},"d2adab1abe07",[202,206,210,214,219],{"_key":203,"_type":72,"marks":204,"text":205},"d2adab1abe070",[],"Java may have been designed as a completely object oriented language, but when Java SE 8 was released in 2014, it added ",{"_key":207,"_type":72,"marks":208,"text":209},"d2adab1abe071",[132],"Lambda expressions (",{"_key":211,"_type":72,"marks":212,"text":213},"d2adab1abe072",[],"aka ",{"_key":215,"_type":72,"marks":216,"text":218},"d2adab1abe073",[217],"1472bb171fd2","closures",{"_key":220,"_type":72,"marks":221,"text":222},"d2adab1abe074",[],"), which added some functional programming elements. Not every problem is best served by OOP, and by adding Lambdas, Java became more flexible.",[224],{"_key":217,"_type":103,"href":225,"reference":12},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FClosure_(computer_programming)",{"_key":227,"_type":68,"children":228,"markDefs":241,"style":76},"42fe781b6094",[229,233,237],{"_key":230,"_type":72,"marks":231,"text":232},"42fe781b60940",[],"Java 9 addressed the potential dependency issues that a pile of JAR files could lead to with ",{"_key":234,"_type":72,"marks":235,"text":236},"42fe781b60941",[132],"modules",{"_key":238,"_type":72,"marks":239,"text":240},"42fe781b60942",[],". It allowed library code to be encapsulated so that when you import a package, you only import the module you need, not the whole JAR. Any dependencies that module has are explicitly declared, so you can check the code to see what code you’re importing. “Having them know that they're not inadvertently depending on something is leading us to a point where the Java ecosystem is much more resilient towards change and constant evolution,” said Saab.",[],{"_key":243,"_type":68,"children":244,"markDefs":262,"style":76},"f3808021e95d",[245,249,253,258],{"_key":246,"_type":72,"marks":247,"text":248},"f3808021e95d0",[],"The bonus feature improvement is one that regular users may not have noticed: ",{"_key":250,"_type":72,"marks":251,"text":252},"f3808021e95d1",[132],"the performance of the ",{"_key":254,"_type":72,"marks":255,"text":257},"f3808021e95d2",[256,132],"09f199e5418c","JVM has been constantly improving",{"_key":259,"_type":72,"marks":260,"text":261},"f3808021e95d3",[],". “You don't necessarily see it happening, but what you see is the effect,” said Saab. “Code that I wrote that ran on J2SE 1.3 still runs on Java 14, but it's just much, much faster. Not only is it faster, but it's faster in a way takes advantage of changes in hardware that nobody had any idea were going to happen in 2004.”",[263],{"_key":256,"_type":103,"href":264,"reference":12},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJava_performance",{"_key":266,"_type":68,"children":267,"markDefs":272,"style":121},"cb5da406a0f1",[268],{"_key":269,"_type":72,"marks":270,"text":271},"cb5da406a0f10",[],"What Java is brewing for the future",[],{"_key":274,"_type":68,"children":275,"markDefs":280,"style":76},"eddf25584a93",[276],{"_key":277,"_type":72,"marks":278,"text":279},"eddf25584a930",[],"Despite its prominence across numerous industries, Java isn’t sitting still. Saab mentioned four big projects coming to Java that had him excited, all designated by codenames: Loom, Valhalla, Leyden, and ZGC.",[],{"_key":282,"_type":68,"children":283,"markDefs":297,"style":76},"00a6656e5ae1",[284,288,293],{"_key":285,"_type":72,"marks":286,"text":287},"00a6656e5ae10",[],"The ",{"_key":289,"_type":72,"marks":290,"text":292},"00a6656e5ae11",[291],"a0b88a6cd27c","Loom",{"_key":294,"_type":72,"marks":295,"text":296},"00a6656e5ae12",[]," project aims to loosen the coupling between Java threads and native threads. Java has had concurrency via threads from the beginning, but they were always tied to an OS thread. Loom introduces fibers, JVM-managed threads that allow more efficient concurrency. With Java server-side applications handling the load of thousands of simultaneous users, better concurrency can only improve web performance.",[298],{"_key":291,"_type":103,"href":299,"reference":12},"https:\u002F\u002Fwiki.openjdk.java.net\u002Fdisplay\u002Floom",{"_key":301,"_type":68,"children":302,"markDefs":321,"style":76},"09e7825a7ccb",[303,308,312,317],{"_key":304,"_type":72,"marks":305,"text":307},"09e7825a7ccb0",[306],"0875619cb761","Valhalla",{"_key":309,"_type":72,"marks":310,"text":311},"09e7825a7ccb1",[]," aims to revise the memory model for Java to allow for immutable types, which are more complex than primitives, but less flexible than objects. Sometimes you have more complex data that doesn’t change over the course of that object’s lifespan; burdening it with the overhead of a class is unnecessary. The initial proposal put it more succinctly: “",{"_key":313,"_type":72,"marks":314,"text":316},"09e7825a7ccb2",[315],"6d59dc6f29da","Codes like a class, works like an int.",{"_key":318,"_type":72,"marks":319,"text":320},"09e7825a7ccb3",[],"” “For things like big data for machine learning or for natural language, Valhalla promises to represent data in a way that allows the JVM to fully take advantage of modern hardware architectures that have changed dramatically since Java was created,” said Saab.",[322,324],{"_key":306,"_type":103,"href":323,"reference":12},"https:\u002F\u002Fwiki.openjdk.java.net\u002Fdisplay\u002Fvalhalla",{"_key":315,"_type":103,"href":325,"reference":12},"http:\u002F\u002Fcr.openjdk.java.net\u002F~jrose\u002Fvalues\u002Fvalues-0.html",{"_key":327,"_type":68,"children":328,"markDefs":338,"style":76},"addac7a333ca",[329,334],{"_key":330,"_type":72,"marks":331,"text":333},"addac7a333ca0",[332],"2050f2b7e3e9","Leyden",{"_key":335,"_type":72,"marks":336,"text":337},"addac7a333ca1",[]," aims to address the startup time of Java applications. For monoliths and single applications, Java sometimes took a while to get going, but once up and running, they were fast. “That’s great if your app server is going to run for two weeks or two months or two years, but it's not that great if you want to run for 30 milliseconds,” said Saab. Server-side software is getting smaller and more distributed, so quick starts are key to fast response times.",[339],{"_key":332,"_type":103,"href":340,"reference":12},"https:\u002F\u002Fmail.openjdk.java.net\u002Fpipermail\u002Fdiscuss\u002F2020-April\u002F005429.html",{"_key":342,"_type":68,"children":343,"markDefs":353,"style":76},"53d75181721a",[344,349],{"_key":345,"_type":72,"marks":346,"text":348},"53d75181721a0",[347],"31c0b07a8b39","ZGC",{"_key":350,"_type":72,"marks":351,"text":352},"53d75181721a1",[]," is a new garbage collector that can handle massive heap sizes, up to 16 terabytes in size, without an increase in pause time. For big data applications that may be processing massive amounts of data in-memory, keeping garbage collection pauses down below 10ms means that processing speed on large data sets won’t be stalled out by limitations in the language.",[354],{"_key":347,"_type":103,"href":355,"reference":12},"https:\u002F\u002Fwiki.openjdk.java.net\u002Fdisplay\u002Fzgc",{"_key":357,"_type":68,"children":358,"markDefs":363,"style":76},"b45ed45fb37f",[359],{"_key":360,"_type":72,"marks":361,"text":362},"b45ed45fb37f0",[],"Java has grown to be integral to much of the modern internet and mobile app landscape, and promises to continue to be part of the information technology toolkit for some time in the future. A quarter century is an eternity in programming, so raise a `class` to Java, past, present, and future.",[],{"_key":365,"_type":68,"children":366,"markDefs":398,"style":76},"47795b584775",[367,372,377,381,385,389,394],{"_key":368,"_type":72,"marks":369,"text":371},"47795b5847750",[370],"em","If you want to learn more, Oracle has ",{"_key":373,"_type":72,"marks":374,"text":376},"47795b5847751",[375,370],"7e41c6bde7c2","put together a wealth of resources ",{"_key":378,"_type":72,"marks":379,"text":380},"47795b5847752",[370],"to celebrate Java's 25th anniversary.",{"_key":382,"_type":72,"marks":383,"text":384},"47795b5847753",[]," ",{"_key":386,"_type":72,"marks":387,"text":388},"47795b5847754",[370],"If you want to check out part 1 of this series, you can find it ",{"_key":390,"_type":72,"marks":391,"text":393},"47795b5847755",[370,392],"a917b4192352","here",{"_key":395,"_type":72,"marks":396,"text":397},"47795b5847756",[370],".",[399,401],{"_key":375,"_type":103,"href":400,"reference":12},"https:\u002F\u002Fwww.oracle.com\u002Fjava\u002Fmoved-by-java\u002F",{"_key":392,"_type":103,"href":402,"reference":12},"https:\u002F\u002Fstackoverflow.blog\u002F2020\u002F07\u002F29\u002Fpodcast-sponsored-25-years-of-java-oracle\u002F",{"_key":404,"_type":68,"children":405,"markDefs":417,"style":76},"9e48bb2da166",[406,410,414],{"_key":407,"_type":72,"marks":408,"text":409},"9e48bb2da1660",[370,132],"A written transcript of this podcast is available ",{"_key":411,"_type":72,"marks":412,"text":393},"9e48bb2da1661",[370,132,413],"47ea1d1025ea",{"_key":415,"_type":72,"marks":416,"text":397},"9e48bb2da1662",[370,132],[418],{"_key":413,"_type":103,"href":419,"reference":12},"https:\u002F\u002Fthe-stack-overflow-podcast.simplecast.com\u002Fepisodes\u002F25-years-of-java-the-present-to-the-future\u002Ftranscript",true,"2020\u002F07\u002F30"," I asked Georges Saab, Vice President of Software Development at Oracle’s Java Platform Group what changes to Java made the most impact and what upcoming features he believes will have a real affect on its future. Here’s some of the features that Saab feels made the language proliferate and a few that will keep it enduring.",{"_type":53,"asset":424},{"_ref":425,"_type":56},"image-cf36de5918d704b163afbfaf9d0cd46bf72adbfe-1912x1424-png",{"code":427,"language":428},"\u003C!-- wp:html -->\n\u003Ciframe height=\"200px\" width=\"100%\" frameborder=\"no\" scrolling=\"no\" seamless=\"\" src=\"https:\u002F\u002Fplayer.simplecast.com\u002F7d510307-e192-4a88-bc3f-fc3308351a30?dark=false\">\u003C\u002Fiframe>\n\u003C!-- \u002Fwp:html -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>My first experience with Java came in my second computer science class, Fundamentals of CS. The intro to programming course used C++, and was my first programming outside of BASIC. With the intro course, I learned loops and logic, variables and function declaration, memory allocation, and basic objects and classes.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>After that, the CS department at CMU decided to switch to this brand new programming language, Java. It ran on any platform, which was great because the primary CS clusters were Solaris machines (a Unix variant put out by Sun). This was back before everyone had a Mac laptop that was also a Linux box. But it introduced me to a whole mess of other language features: threads, garbage collection, AWT (the abstract windows toolkit), exceptions, and object oriented programming.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Since then, Java has gone through roughly fourteen major feature releases,, transitioned between stewards with Oracle’s purchase of Sun Microsystems, \u003Ca href=\"https:\u002F\u002Fopenjdk.java.net\u002F\">open sourced the code behind the language\u003C\u002Fa>, and spawned several languages that use its virtual machine, including Scala, Clojure, and Kotlin. Personally, I’ve worked for several companies that built complex products on Java, whether they were embedded in browsers, installed in desktops through WebStart, or behind the scenes in a service-oriented architecture backend.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>1995 to 2020—that quarter century is saw the rise and fall of several epochs in the tech industry. I asked Georges Saab, Vice President of Software Development at Oracle’s Java Platform Group what changes to Java made the most impact and what upcoming features he believes will have a real affect on its future. Here’s some of the features that Saab feels made the language proliferate and a few that will keep it enduring.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>High impact changes&nbsp;\u003C\u002Fh2>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>The very first feature that made a massive impact wasn’t a change in the Java language at all. It was the \u003Cstrong>vastly improved library support\u003C\u002Fstrong> that happened in the early releases. Between 1.0 and 1.3, these libraries included the \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSwing_(Java)\">Swing\u003C\u002Fa> window toolkit, the \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJava_collections_framework\">Collections\u003C\u002Fa> framework, a \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJava_remote_method_invocation\">RPC-like API\u003C\u002Fa> for remote calls, \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJava_Database_Connectivity\">JDBC\u003C\u002Fa> for interacting with databases, and more. The standard libraries grew richer, more sophisticated, and allowed Java to become a real enterprise language.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>In 2004, Java added \u003Cstrong>generics\u003C\u002Fstrong>, which allowed types, methods, and interfaces to be specified with the associated data types to be specified when that item was instantiated without sacrificing type safety. “At the time, generics were a challenge and people had strong opinions about them,” said Saab. Today, generics are one of the enduring features of the language.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Java may have been designed as a completely object oriented language, but when Java SE 8 was released in 2014, it added \u003Cstrong>Lambda expressions (\u003C\u002Fstrong>aka \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FClosure_(computer_programming)\">closures\u003C\u002Fa>), which added some functional programming elements. Not every problem is best served by OOP, and by adding Lambdas, Java became more flexible.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Java 9 addressed the potential dependency issues that a pile of JAR files could lead to with \u003Cstrong>modules\u003C\u002Fstrong>. It allowed library code to be encapsulated so that when you import a package, you only import the module you need, not the whole JAR. Any dependencies that module has are explicitly declared, so you can check the code to see what code you’re importing. “Having them know that they're not inadvertently depending on something is leading us to a point where the Java ecosystem is much more resilient towards change and constant evolution,” said Saab.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>The bonus feature improvement is one that regular users may not have noticed: \u003Cstrong>the performance of the \u003C\u002Fstrong>\u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJava_performance\">\u003Cstrong>JVM has been constantly improving\u003C\u002Fstrong>\u003C\u002Fa>. “You don't necessarily see it happening, but what you see is the effect,” said Saab. “Code that I wrote that ran on J2SE 1.3 still runs on Java 14, but it's just much, much faster. Not only is it faster, but it's faster in a way takes advantage of changes in hardware that nobody had any idea were going to happen in 2004.”\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>What Java is brewing for the future\u003C\u002Fh2>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Despite its prominence across numerous industries, Java isn’t sitting still. Saab mentioned four big projects coming to Java that had him excited, all designated by codenames: Loom, Valhalla, Leyden, and ZGC.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>The \u003Ca href=\"https:\u002F\u002Fwiki.openjdk.java.net\u002Fdisplay\u002Floom\">Loom\u003C\u002Fa> project aims to loosen the coupling between Java threads and native threads. Java has had concurrency via threads from the beginning, but they were always tied to an OS thread. Loom introduces fibers, JVM-managed threads that allow more efficient concurrency. With Java server-side applications handling the load of thousands of simultaneous users, better concurrency can only improve web performance.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwiki.openjdk.java.net\u002Fdisplay\u002Fvalhalla\">Valhalla\u003C\u002Fa> aims to revise the memory model for Java to allow for immutable types, which are more complex than primitives, but less flexible than objects. Sometimes you have more complex data that doesn’t change over the course of that object’s lifespan; burdening it with the overhead of a class is unnecessary. The initial proposal put it more succinctly: “\u003Ca href=\"http:\u002F\u002Fcr.openjdk.java.net\u002F~jrose\u002Fvalues\u002Fvalues-0.html\">Codes like a class, works like an int.\u003C\u002Fa>” “For things like big data for machine learning or for natural language, Valhalla promises to represent data in a way that allows the JVM to fully take advantage of modern hardware architectures that have changed dramatically since Java was created,” said Saab.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fmail.openjdk.java.net\u002Fpipermail\u002Fdiscuss\u002F2020-April\u002F005429.html\">Leyden\u003C\u002Fa> aims to address the startup time of Java applications. For monoliths and single applications, Java sometimes took a while to get going, but once up and running, they were fast. “That’s great if your app server is going to run for two weeks or two months or two years, but it's not that great if you want to run for 30 milliseconds,” said Saab. Server-side software is getting smaller and more distributed, so quick starts are key to fast response times.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwiki.openjdk.java.net\u002Fdisplay\u002Fzgc\">ZGC\u003C\u002Fa> is a new garbage collector that can handle massive heap sizes, up to 16 terabytes in size, without an increase in pause time. For big data applications that may be processing massive amounts of data in-memory, keeping garbage collection pauses down below 10ms means that processing speed on large data sets won’t be stalled out by limitations in the language.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Java has grown to be integral to much of the modern internet and mobile app landscape, and promises to continue to be part of the information technology toolkit for some time in the future. A quarter century is an eternity in programming, so raise a `class` to Java, past, present, and future.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cem>If you want to learn more, Oracle has&nbsp;\u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Fwww.oracle.com\u002Fjava\u002Fmoved-by-java\u002F\">\u003Cem>put together a wealth of resources&nbsp;\u003C\u002Fem>\u003C\u002Fa>\u003Cem>to celebrate Java's 25th anniversary.\u003C\u002Fem> \u003Cem>If you want to check out part 1 of this series, you can find it \u003Ca href=\"https:\u002F\u002Fstackoverflow.blog\u002F2020\u002F07\u002F29\u002Fpodcast-sponsored-25-years-of-java-oracle\u002F\">here\u003C\u002Fa>.\u003C\u002Fem>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cem>\u003Cstrong>A written transcript of this podcast is available \u003Ca href=\"https:\u002F\u002Fthe-stack-overflow-podcast.simplecast.com\u002Fepisodes\u002F25-years-of-java-the-present-to-the-future\u002Ftranscript\">here\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fem>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->","html","2020-07-30T04:40:00.000Z",{"current":431},"java-at-25-features-that-made-an-impact-and-a-look-to-the-future",[433,441,445],{"_createdAt":434,"_id":435,"_rev":436,"_type":437,"_updatedAt":434,"slug":438,"title":440},"2023-05-23T16:43:21Z","wp-tagcat-code-for-a-living","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":439},"code-for-a-living","Code for a Living",{"_createdAt":434,"_id":442,"_rev":436,"_type":437,"_updatedAt":434,"slug":443,"title":444},"wp-tagcat-java",{"current":444},"java",{"_createdAt":434,"_id":446,"_rev":436,"_type":437,"_updatedAt":434,"slug":447,"title":449},"wp-tagcat-podcast",{"current":448},"podcast","The Stack Overflow Podcast","Java at 25: Features that made an impact and a look to the future",[452,458,464,470],{"_id":453,"publishedAt":454,"slug":455,"sponsored":12,"title":457},"76c9771b-34e6-4d98-8641-ecefc711f0ef","2026-07-06T15:23:34.559Z",{"_type":10,"current":456},"when-the-sensor-starts-thinking-snortml-agentic-ai-and-the-evolving-architecture-of-intrusion-detection","When the sensor starts thinking: SnortML, agentic AI, and the evolving architecture of intrusion detection",{"_id":459,"publishedAt":460,"slug":461,"sponsored":12,"title":463},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":462},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":465,"publishedAt":466,"slug":467,"sponsored":12,"title":469},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":468},"your-ai-shipped-a-backend-that-boots-that-is-the-whole-problem","Your AI shipped a backend that boots. That is the whole problem.",{"_id":471,"publishedAt":472,"slug":473,"sponsored":12,"title":475},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":474},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"data":477,"sourceMap":-1},{"count":478,"lastTimestamp":479},14,"2025-12-10T16:17:26Z"]