<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Java Code Geeks</title>
    <link>https://www.javacodegeeks.com/feed/</link>
    <description>Java Developers Resource Center</description>
    <pubDate>Thu, 30 Apr 2026 08:38:15 +0000</pubDate>
    <lastBuildDate>Thu, 30 Apr 2026 08:38:15 +0000</lastBuildDate>
    <image>
      <url>https://www.javacodegeeks.com/wp-content/uploads/2012/12/JavaCodeGeeks-favIcon.png</url>
      <title>Java Code Geeks</title>
      <link>https://www.javacodegeeks.com/</link>
    </image>
    <item>
      <title>[DEALS] Surfshark VPN Starter Plan: 3-Yr Subscription (80% off) &amp; Other Deals Up To 98% Off – Offers End Soon!</title>
      <link>https://www.javacodegeeks.com/2026/04/deals-surfshark-vpn-starter-plan-3-yr-subscription-80-off-other-deals-up-to-98-off-offers-end-soon.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/meta-jcg&gt;Meta JCG&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;[DEALS] Surfshark VPN Starter Plan: 3-Yr Subscription (80% off) &amp;amp; Other Deals Up To 98% Off – Offers End Soon!&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-16&#34; href=https://www.javacodegeeks.com/category/meta-jcg&gt;Meta JCG&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;[DEALS] Surfshark VPN Starter Plan: 3-Yr Subscription (80% off) &amp;amp; Other Deals Up To 98% Off – Offers End Soon!&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;p&gt;Hello fellow geeks,&lt;p&gt;Fresh offers await you on our &lt;a href=https://deals.javacodegeeks.com/&gt;Deals store&lt;/a&gt;, please have a look!&lt;table width=600 cellpadding=0 cellspacing=0 border=0 align=center bgcolor=#ffffff style=&#34;width: 600px;max-width:600px;margin: 0 auto&#34;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=2 align=center style=&#34;border-bottom: 0&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/3-year-subscription?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=3-year-subscription&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp1.stackassets.com/1ee5cb686a48a8354d5b6cbe6d6162bf29b1e07e/store/5a33c0880f0468f0600e4c01aaad359b57294091e980d3a31e84f595a1ce/sale_310329_primary_image.jpg decoding=async width=600 style=&#34;padding-top: 15px&#34; class=test-email-main-image alt data-src=https://cdnp1.stackassets.com/1ee5cb686a48a8354d5b6cbe6d6162bf29b1e07e/store/5a33c0880f0468f0600e4c01aaad359b57294091e980d3a31e84f595a1ce/sale_310329_primary_image.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=600 style=&#34;padding-top: 15px&#34; class=test-email-main-image alt src=https://cdnp1.stackassets.com/1ee5cb686a48a8354d5b6cbe6d6162bf29b1e07e/store/5a33c0880f0468f0600e4c01aaad359b57294091e980d3a31e84f595a1ce/sale_310329_primary_image.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;tr&gt;&lt;tr&gt;&lt;td style=&#34;border-top: 0;border-bottom: 0&#34; valign=top colspan=2&gt;&lt;p style=&#34;font-size: 26px;color: #222222;line-height: 120%;margin-top: 0;margin-bottom: 15px;width: 425px&#34;&gt;&lt;strong&gt;&lt;br&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/3-year-subscription?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=3-year-subscription&#34;&gt;Surfshark VPN Starter Plan: 3-Yr Subscription&lt;/a&gt;&lt;br&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(80% off)&lt;/span&gt;&lt;br&gt;&lt;/strong&gt;&lt;p style=&#34;font-size: 14px;font-weight: 100;color: #666;line-height: 110%;margin-top: 0&#34;&gt;&lt;img data-lazyloaded=1 src=https://admin.stackcommerce.com/assets/mail/icon-clock-ce3479938622cf856e31d6366f64c3bdb482ad6b8298264cb66e4493f777938a.jpg decoding=async style=&#34;padding-right: 5px;position:relative;top: 3px&#34; data-src=https://admin.stackcommerce.com/assets/mail/icon-clock-ce3479938622cf856e31d6366f64c3bdb482ad6b8298264cb66e4493f777938a.jpg&gt;&lt;noscript&gt;&lt;img decoding=async style=&#34;padding-right: 5px;position:relative;top: 3px&#34; src=https://admin.stackcommerce.com/assets/mail/icon-clock-ce3479938622cf856e31d6366f64c3bdb482ad6b8298264cb66e4493f777938a.jpg&gt;&lt;/noscript&gt;Ending soon &lt;span style=&#34;padding: 0 5px&#34;&gt;//&lt;/span&gt; by Java Code Geeks&lt;p&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/3-year-subscription?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=3-year-subscription&#34;&gt;&lt;img data-lazyloaded=1 src=https://admin.stackcommerce.com/assets/mail/getit-d0a9c0e097c840198d1fa8b76acebbe039c0927216606397264fcc7639bfb1fc.jpg decoding=async border=0 data-src=https://admin.stackcommerce.com/assets/mail/getit-d0a9c0e097c840198d1fa8b76acebbe039c0927216606397264fcc7639bfb1fc.jpg&gt;&lt;noscript&gt;&lt;img decoding=async border=0 src=https://admin.stackcommerce.com/assets/mail/getit-d0a9c0e097c840198d1fa8b76acebbe039c0927216606397264fcc7639bfb1fc.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;tr&gt;&lt;td colspan=3&gt;&lt;p style=&#34;font-size: 14px;color: #666;line-height: 150%;width: 600px;max-width: 600px;margin: 0 auto 0 0&#34;&gt;&lt;b&gt;Access Your Favorite Content on Unlimited Devices Using Torrent-Friendly Servers&lt;/b&gt;&lt;/table&gt;&lt;table width=600 cellpadding=0 cellspacing=0 align=center bgcolor=#ffffff style=&#34;border-top-style: solid;border-top-width: 1px;border-top-color: #DDDDDD;padding-top: 5px;margin-top: 30px&#34;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-right: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/subscriptionnotebook-unlimited?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=subscriptionnotebook-unlimited&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp0.stackassets.com/9218999e04ef32cbd4ccb9ea6f85e19923952c2e/store/5c1ba144f4168dfc1a6cebafa1306a1de9b3f4c964fd0d8c9fa47b1ed936/sale_327949_primary_image.jpg decoding=async width=285 data-src=https://cdnp0.stackassets.com/9218999e04ef32cbd4ccb9ea6f85e19923952c2e/store/5c1ba144f4168dfc1a6cebafa1306a1de9b3f4c964fd0d8c9fa47b1ed936/sale_327949_primary_image.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp0.stackassets.com/9218999e04ef32cbd4ccb9ea6f85e19923952c2e/store/5c1ba144f4168dfc1a6cebafa1306a1de9b3f4c964fd0d8c9fa47b1ed936/sale_327949_primary_image.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/subscriptionnotebook-unlimited?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=subscriptionnotebook-unlimited&#34;&gt;SubscriptionNotebook Unlimited Plan: Lifetime Subscription&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(90% off)&lt;/span&gt;&lt;/strong&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-left: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/swifdoo-pdf-pro-perpetual-lifetime-license?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=swifdoo-pdf-pro-perpetual-lifetime-license&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp0.stackassets.com/ab88772f5ef609ab9400da20cebcefa5ee64955f/store/f1d590e17399ebfde6a625bad5bc7c991db855afb7734749ee59b9e8fd2a/sale_327283_primary_image.jpg decoding=async width=285 data-src=https://cdnp0.stackassets.com/ab88772f5ef609ab9400da20cebcefa5ee64955f/store/f1d590e17399ebfde6a625bad5bc7c991db855afb7734749ee59b9e8fd2a/sale_327283_primary_image.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp0.stackassets.com/ab88772f5ef609ab9400da20cebcefa5ee64955f/store/f1d590e17399ebfde6a625bad5bc7c991db855afb7734749ee59b9e8fd2a/sale_327283_primary_image.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/swifdoo-pdf-pro-perpetual-lifetime-license?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=swifdoo-pdf-pro-perpetual-lifetime-license&#34;&gt;SwifDoo PDF Pro: Perpetual Lifetime License for Windows&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(72% off)&lt;/span&gt;&lt;/strong&gt;&lt;tr&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-right: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/one-year-the-club-card-membership-with-bj-s-easy-renewal?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=one-year-the-club-card-membership-with-bj-s-easy-renewal&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp0.stackassets.com/f6b9829b8db5486fe0b28b57d38eb7bdea540e29/store/85f42d6e37b567d776b34b50ff0f94ea6187fa1fefbe5983e44fb0116b99/sale_326400_primary_image.jpg decoding=async width=285 data-src=https://cdnp0.stackassets.com/f6b9829b8db5486fe0b28b57d38eb7bdea540e29/store/85f42d6e37b567d776b34b50ff0f94ea6187fa1fefbe5983e44fb0116b99/sale_326400_primary_image.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp0.stackassets.com/f6b9829b8db5486fe0b28b57d38eb7bdea540e29/store/85f42d6e37b567d776b34b50ff0f94ea6187fa1fefbe5983e44fb0116b99/sale_326400_primary_image.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/one-year-the-club-card-membership-with-bj-s-easy-renewal?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=one-year-the-club-card-membership-with-bj-s-easy-renewal&#34;&gt;1-year The Club Card Membership with BJ’s Easy Renewal (Terms apply.)&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(66% off)&lt;/span&gt;&lt;/strong&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-left: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/microsoft-windows-11-home-3?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=microsoft-windows-11-home-3&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp1.stackassets.com/e3832ddff52294c39a495b686638e57726d239d0/store/0b44f6a0107cac223a217530758444ea0cadd8b298ea26821703f7ec1062/sale_Win11Home_primary_image.jpg decoding=async width=285 data-src=https://cdnp1.stackassets.com/e3832ddff52294c39a495b686638e57726d239d0/store/0b44f6a0107cac223a217530758444ea0cadd8b298ea26821703f7ec1062/sale_Win11Home_primary_image.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp1.stackassets.com/e3832ddff52294c39a495b686638e57726d239d0/store/0b44f6a0107cac223a217530758444ea0cadd8b298ea26821703f7ec1062/sale_Win11Home_primary_image.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/microsoft-windows-11-home-3?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=microsoft-windows-11-home-3&#34;&gt;Microsoft Windows 11 Home&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(90% off)&lt;/span&gt;&lt;/strong&gt;&lt;tr&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-right: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/1minai-advanced-business-plan-lifetime-subscription?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=1minai-advanced-business-plan-lifetime-subscription&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp1.stackassets.com/34ff06bcb6fbe25497635be21cf264ff1783fa53/store/eceff7fb0588ab19cc3ae67e3194563fa0f9eb407526755610d88ea901cc/sale_326640_primary_image.jpg decoding=async width=285 data-src=https://cdnp1.stackassets.com/34ff06bcb6fbe25497635be21cf264ff1783fa53/store/eceff7fb0588ab19cc3ae67e3194563fa0f9eb407526755610d88ea901cc/sale_326640_primary_image.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp1.stackassets.com/34ff06bcb6fbe25497635be21cf264ff1783fa53/store/eceff7fb0588ab19cc3ae67e3194563fa0f9eb407526755610d88ea901cc/sale_326640_primary_image.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/1minai-advanced-business-plan-lifetime-subscription?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=1minai-advanced-business-plan-lifetime-subscription&#34;&gt;1min.AI Advanced Business Plan Lifetime Subscription&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(81% off)&lt;/span&gt;&lt;/strong&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-left: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/fastestvpn-pro-lifetime-subscription?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=fastestvpn-pro-lifetime-subscription&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp3.stackassets.com/a70f4992418e95206aa7d19f64107a2f166b8680/store/69553693dbae60bbd82609bed669bfabd990174ef796e5265b2ee46f85ed/sale_323446_primary_image.jpg decoding=async width=285 data-src=https://cdnp3.stackassets.com/a70f4992418e95206aa7d19f64107a2f166b8680/store/69553693dbae60bbd82609bed669bfabd990174ef796e5265b2ee46f85ed/sale_323446_primary_image.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp3.stackassets.com/a70f4992418e95206aa7d19f64107a2f166b8680/store/69553693dbae60bbd82609bed669bfabd990174ef796e5265b2ee46f85ed/sale_323446_primary_image.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/fastestvpn-pro-lifetime-subscription?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=fastestvpn-pro-lifetime-subscription&#34;&gt;FastestVPN PRO: Lifetime Subscription (15 Devices)&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(95% off)&lt;/span&gt;&lt;/strong&gt;&lt;tr&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-right: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/internxt-cloud-storage-lifetime-subscription-5tb-plan?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=internxt-cloud-storage-lifetime-subscription-5tb-plan&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp1.stackassets.com/cb9147d79b127f672f0d54b09bc5d695285a6aff/store/265b1f2a57f52d0f563fe74e000456d7a581ba0fb4c0820d918e692be199/product_xxxxx_product_shots1.jpg decoding=async width=285 data-src=https://cdnp1.stackassets.com/cb9147d79b127f672f0d54b09bc5d695285a6aff/store/265b1f2a57f52d0f563fe74e000456d7a581ba0fb4c0820d918e692be199/product_xxxxx_product_shots1.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp1.stackassets.com/cb9147d79b127f672f0d54b09bc5d695285a6aff/store/265b1f2a57f52d0f563fe74e000456d7a581ba0fb4c0820d918e692be199/product_xxxxx_product_shots1.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/internxt-cloud-storage-lifetime-subscription-5tb-plan?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=internxt-cloud-storage-lifetime-subscription-5tb-plan&#34;&gt;Internxt Cloud Storage: Lifetime Subscription (5TB Plan)&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(88% off)&lt;/span&gt;&lt;/strong&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-left: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/microsoft-visual-studio-professional-2022-the-premium-learn-to-code-certification-bundle-2?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=microsoft-visual-studio-professional-2022-the-premium-learn-to-code-certification-bundle-2&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp3.stackassets.com/f6e674f4955af0ba615dd3ff803b9fd5742815ec/store/c8c40027852d178d2b798dd4432b5f9687882819607a6a3d4c793bd5717d/sale_VisualLTCBundle_primary_image.jpg decoding=async width=285 data-src=https://cdnp3.stackassets.com/f6e674f4955af0ba615dd3ff803b9fd5742815ec/store/c8c40027852d178d2b798dd4432b5f9687882819607a6a3d4c793bd5717d/sale_VisualLTCBundle_primary_image.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp3.stackassets.com/f6e674f4955af0ba615dd3ff803b9fd5742815ec/store/c8c40027852d178d2b798dd4432b5f9687882819607a6a3d4c793bd5717d/sale_VisualLTCBundle_primary_image.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/microsoft-visual-studio-professional-2022-the-premium-learn-to-code-certification-bundle-2?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=microsoft-visual-studio-professional-2022-the-premium-learn-to-code-certification-bundle-2&#34;&gt;Microsoft Visual Studio Professional 2022 + The Premium Learn to Code Certification Bundle&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(98% off)&lt;/span&gt;&lt;/strong&gt;&lt;tr&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-right: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/the-2024-python-for-software-engineering-bootcamp-certification-bundle?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=the-2024-python-for-software-engineering-bootcamp-certification-bundle&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp0.stackassets.com/95b3a731ea4cf173f3acc1c58106bf5c37172c56/store/b78851e9fbd2d1524cd480fa558492a8e895835a69cdf8b163810017e0aa/sale_323890_primary_image.jpg decoding=async width=285 data-src=https://cdnp0.stackassets.com/95b3a731ea4cf173f3acc1c58106bf5c37172c56/store/b78851e9fbd2d1524cd480fa558492a8e895835a69cdf8b163810017e0aa/sale_323890_primary_image.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp0.stackassets.com/95b3a731ea4cf173f3acc1c58106bf5c37172c56/store/b78851e9fbd2d1524cd480fa558492a8e895835a69cdf8b163810017e0aa/sale_323890_primary_image.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/the-2024-python-for-software-engineering-bootcamp-certification-bundle?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=the-2024-python-for-software-engineering-bootcamp-certification-bundle&#34;&gt;The Python for Software Engineering Bootcamp Certification Bundle&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(94% off)&lt;/span&gt;&lt;/strong&gt;&lt;td valign=top width=300 style=&#34;padding-top: 30px;padding-left: 15px&#34;&gt;&lt;a class=campaign-sale-link href=&#34;http://deals.javacodegeeks.com/sales/1forall-ai-basic-plan-lifetime-subscription?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=1forall-ai-basic-plan-lifetime-subscription&#34;&gt;&lt;img data-lazyloaded=1 src=https://cdnp0.stackassets.com/d976a6d4f981ccae79d1d7a3ed162a3881318988/store/1c055be34d15040368282a42463fc398990cc18bd978533c4370adf6faf0/product_346673_product_shots1+2.jpg decoding=async width=285 data-src=https://cdnp0.stackassets.com/d976a6d4f981ccae79d1d7a3ed162a3881318988/store/1c055be34d15040368282a42463fc398990cc18bd978533c4370adf6faf0/product_346673_product_shots1+2.jpg&gt;&lt;noscript&gt;&lt;img decoding=async width=285 src=https://cdnp0.stackassets.com/d976a6d4f981ccae79d1d7a3ed162a3881318988/store/1c055be34d15040368282a42463fc398990cc18bd978533c4370adf6faf0/product_346673_product_shots1+2.jpg&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;p&gt;&lt;p style=&#34;font-size: 16px;color: #222222;line-height: 120%;margin-bottom: 15px;width: 250px&#34;&gt;&lt;a class=campaign-sale-link style=&#34;color: #222222;text-decoration: none&#34; href=&#34;http://deals.javacodegeeks.com/sales/1forall-ai-basic-plan-lifetime-subscription?utm_source=JVG&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026-04-30_JVG_3-year-subscription&amp;amp;utm_content=1forall-ai-basic-plan-lifetime-subscription&#34;&gt;1ForAll AI: Lifetime Subscription&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;span style=&#34;color: #00B0FF&#34;&gt;(83% off)&lt;/span&gt;&lt;/strong&gt;&lt;/table&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-lScpo93OExHoeMRI lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=lScpo93OExHoeMRI data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-SjnKZUmJrco387MK-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-SjnKZUmJrco387MK-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-SjnKZUmJrco387MK-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png.webp fetchpriority=high decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png.webp alt width=320 height=363&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png.webp alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-lScpo93OExHoeMRI lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=lScpo93OExHoeMRI data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-lScpo93OExHoeMRI value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/deals rel=tag&gt;Deals&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Java Code Geeks</author>
      <guid>https://www.javacodegeeks.com/2026/04/deals-surfshark-vpn-starter-plan-3-yr-subscription-80-off-other-deals-up-to-98-off-offers-end-soon.html</guid>
      <pubDate>Thu, 30 Apr 2026 10:30:30 +0000</pubDate>
    </item>
    <item>
      <title>Getting Started with TOON Format in Java</title>
      <link>https://www.javacodegeeks.com/getting-started-with-toon-format-in-java.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java&gt;Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java/enterprise-java&gt;Enterprise Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;Getting Started with TOON Format in Java&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-8&#34; href=https://www.javacodegeeks.com/category/java/enterprise-java&gt;Enterprise Java&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;Getting Started with TOON Format in Java&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;div class=&#34;stream-item stream-item-above-post-content&#34;&gt;&lt;div class=stream-item-size&gt;&lt;div id=adngin-in-post-0 style=&#34;float:left; margin-right:20px; margin-bottom:10px; width:300px; height:274px;&#34;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=https://toonformat.dev/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;Token-Oriented Object Notation&lt;/a&gt; (TOON) is a modern data serialization format designed to represent structured data in a compact, human-readable, and token-efficient way. It encodes the same data model as JSON but removes unnecessary syntax such as braces, quotes, and repeated field names. This makes TOON beneficial in Java applications that interact with APIs and Large Language Models (LLMs), where reducing token usage improves both performance and cost efficiency.&lt;h2 class=wp-block-heading&gt;1. Understanding TOON Syntax&lt;/h2&gt;&lt;p&gt;TOON represents structured data using indentation for objects and concise, CSV-like structures for arrays, combining YAML-style readability with tabular efficiency. By eliminating unnecessary punctuation while preserving the structure and meaning of the data, this approach enhances readability and maintains a strict, well-defined format that can be easily parsed.&lt;pre class=brush:plain&gt;product:&#xA;  id: 101&#xA;  name: Laptop&#xA;  price: 1500&#xA;  tags[2]: electronics,computing&#xA;&lt;/pre&gt;&lt;p&gt;One of the design goals of TOON is to reduce token consumption by eliminating repetitive structures like braces, quotes, and repeated field names, which are common in JSON.&lt;p&gt;In the example above, the object is defined using indentation, and the array explicitly specifies its size. This reduces ambiguity and simplifies parsing. The syntax replaces JSON braces and quotes with indentation and concise &lt;code&gt;key-value&lt;/code&gt; pairs. Arrays explicitly include their size (e.g., &lt;code&gt;[2]&lt;/code&gt;).&lt;p&gt;&lt;strong&gt;Example: JSON vs TOON&lt;/strong&gt;&lt;p&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;pre class=brush:javascript&gt;{&#xA;  &amp;#34;name&amp;#34;: &amp;#34;Thomas&amp;#34;,&#xA;  &amp;#34;age&amp;#34;: 30,&#xA;  &amp;#34;city&amp;#34;: &amp;#34;London&amp;#34;&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;TOON&lt;/strong&gt;&lt;pre class=brush:plain&gt;name: Thomas&#xA;age: 30&#xA;city: London&#xA;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;TOON Data Structures&lt;/strong&gt;&lt;p&gt;TOON supports the same core data structures as JSON: primitives, objects, and arrays.&lt;p&gt;&lt;strong&gt;Objects&lt;/strong&gt;&lt;p&gt;Objects are represented using &lt;code&gt;key: value&lt;/code&gt; pairs, one per line.&lt;pre class=brush:plain&gt;id: 101&#xA;name: Thomas&#xA;active: true&#xA;&lt;/pre&gt;&lt;p&gt;This structure is straightforward and avoids the need for braces, making it easier to read and write.&lt;p&gt;&lt;strong&gt;Nested Objects&lt;/strong&gt;&lt;p&gt;Nested objects are represented through indentation.&lt;pre class=brush:plain&gt;user:&#xA;  id: 1&#xA;  name: John&#xA;&lt;/pre&gt;&lt;p&gt;Indentation defines hierarchy, similar to YAML, ensuring clarity in deeply nested structures.&lt;p&gt;&lt;strong&gt;Arrays&lt;/strong&gt;&lt;p&gt;Arrays in TOON explicitly declare their size using &lt;code&gt;[N]&lt;/code&gt;.&lt;pre class=brush:plain&gt;colors[3]: red,green,blue&#xA;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Tabular Arrays&lt;/strong&gt;&lt;p&gt;One of TOON’s powerful features is its tabular representation for uniform arrays of objects.&lt;pre class=brush:plain&gt;users[2]{id,name,role}:&#xA;  1,Thomas,admin&#xA;  2,John,user&#xA;&lt;/pre&gt;&lt;p&gt;Here:&lt;ul class=wp-block-list&gt;&lt;li&gt;&lt;code&gt;[2]&lt;/code&gt; indicates the number of elements&lt;li&gt;&lt;code&gt;{id,name,role}&lt;/code&gt; defines the schema&lt;li&gt;Each row contains only values&lt;/ul&gt;&lt;p&gt;This avoids repeating field names for every object, significantly reducing data size.&lt;h2 class=wp-block-heading&gt;2. Setting Up TOON in a Java Project&lt;/h2&gt;&lt;p&gt;To work with TOON in Java, we need a supporting library such as &lt;a href=https://mvnrepository.com/artifact/io.github.koinsaari/j-toon-core target=_blank rel=&#34;noreferrer noopener&#34;&gt;JToon&lt;/a&gt; or &lt;a href=https://github.com/jdereg/json-io target=_blank rel=&#34;noreferrer noopener&#34;&gt;json-io&lt;/a&gt;, both of which provide encoding and decoding capabilities.&lt;pre class=brush:xml&gt;        &amp;lt;dependency&amp;gt;&#xA;            &amp;lt;groupId&amp;gt;dev.toonformat&amp;lt;/groupId&amp;gt;&#xA;            &amp;lt;artifactId&amp;gt;jtoon&amp;lt;/artifactId&amp;gt;&#xA;            &amp;lt;version&amp;gt;1.0.9&amp;lt;/version&amp;gt;&#xA;        &amp;lt;/dependency&amp;gt;&#xA;&lt;/pre&gt;&lt;p&gt;This configuration adds the JToon library, which provides APIs for encoding Java objects into TOON and decoding TOON into Java structures. It is designed to be lightweight and compatible with modern Java 17+ applications.&lt;h2 class=wp-block-heading&gt;3. Parsing TOON Data in Java&lt;/h2&gt;&lt;p&gt;Parsing TOON involves converting a TOON string into Java objects or generic structures.&lt;div style=&#34;display:inline-block; margin: 15px 0;&#34;&gt;&lt;div id=adngin-JavaCodeGeeks_incontent_video-0 style=display:inline-block;&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;pre class=brush:java&gt;public class ToonService {&#xA;&#xA;    public Object parseToObject(String toon) {&#xA;        return JToon.decode(toon);&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;decode&lt;/code&gt; method parses TOON text into Java types such as &lt;code&gt;Map&lt;/code&gt;, &lt;code&gt;List&lt;/code&gt;, or primitives.&lt;p&gt;&lt;strong&gt;Parsing Arrays&lt;/strong&gt;&lt;p&gt;TOON provides a structured way to represent arrays, including tabular arrays for objects.&lt;pre class=brush:java&gt;public class ToonJavaDemo {&#xA;&#xA;    public static void main(String[] args) {&#xA;&#xA;        String toon = &amp;#34;&amp;#34;&amp;#34;&#xA;            products[2]{id,name,price}:&#xA;            101,Laptop,1500&#xA;            102,Phone,800&#xA;            &amp;#34;&amp;#34;&amp;#34;;&#xA;&#xA;        Object result = JToon.decode(toon);   &#xA;        IO.println(result);&#xA; &#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;In this format, &lt;code&gt;[2]&lt;/code&gt; specifies the number of elements, and &lt;code&gt;{id,name,price}&lt;/code&gt; defines the schema. Each row represents a product without repeating field names. The parser automatically converts this structure into a list of objects, making it efficient for handling large datasets.&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;pre class=brush:plain&gt;{products=[{id=101, name=Laptop, price=1500}, {id=102, name=Phone, price=800}]}&#xA;&lt;/pre&gt;&lt;h2 class=wp-block-heading&gt;4. Converting Java Objects to TOON&lt;/h2&gt;&lt;p&gt;Java objects can be easily converted into TOON strings. This process is essential when preparing structured data for storage, transmission, or integration with systems like APIs and LLMs. The library automatically handles formatting, ensuring the output adheres to TOON syntax, including indentation and compact array representation.&lt;pre class=brush:java&gt;public record Product(int id, String name, double price, List&amp;lt;String&amp;gt; tags) {}&#xA;&#xA;public class ToonService {&#xA;    &#xA;    public String generateToon(Product product) {&#xA;        return JToon.encode(product);&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;The above code defines a &lt;code&gt;Product&lt;/code&gt; record and a &lt;code&gt;ToonService&lt;/code&gt; class responsible for converting the object into TOON format. The &lt;code&gt;JToon.encode()&lt;/code&gt; method serializes the Java object into a TOON string, automatically applying the correct structure and formatting rules.&lt;p&gt;&lt;strong&gt;Example Usage&lt;/strong&gt;&lt;pre class=brush:java&gt;public class ToonJavaDemo {&#xA;&#xA;    public static void main(String[] args) {&#xA;&#xA;        Product product = new Product(101, &amp;#34;Laptop&amp;#34;, 1500.00, List.of(&amp;#34;electronics&amp;#34;, &amp;#34;computing&amp;#34;));&#xA;        ToonService service = new ToonService();&#xA;        String toonOutput = service.generateToon(product);&#xA;&#xA;        IO.println(toonOutput);&#xA;    }&#xA;}&#xA;&#xA;&lt;/pre&gt;&lt;p&gt;This example creates a &lt;code&gt;Product&lt;/code&gt; instance and uses the service to generate its TOON representation. The result is printed to the console, demonstrating how Java objects can be easily converted into TOON format.&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;pre class=brush:plain&gt;id: 101&#xA;name: Laptop&#xA;price: 1500&#xA;tags[2]: electronics,computing&#xA;&lt;/pre&gt;&lt;p&gt;The output shows the TOON representation of the &lt;code&gt;Product&lt;/code&gt; object. The structure is clean and concise, with arrays represented using a compact format that specifies their size and values inline.&lt;p&gt;&lt;strong&gt;Converting Lists&lt;/strong&gt;&lt;p&gt;TOON is highly efficient when working with lists of objects.&lt;pre class=brush:java&gt;public class ToonJavaDemo {&#xA;&#xA;    public static void main(String[] args) {&#xA;&#xA;        List&amp;lt;Product&amp;gt; products = List.of(&#xA;                new Product(101, &amp;#34;Laptop&amp;#34;, 1500, List.of(&amp;#34;electronics&amp;#34;)),&#xA;                new Product(102, &amp;#34;Phone&amp;#34;, 800, List.of(&amp;#34;mobile&amp;#34;))&#xA;        );&#xA;&#xA;        String toon = JToon.encode(products);&#xA;&#xA;        IO.println(toon);&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;pre class=brush:plain&gt;[2]:&#xA;  - id: 101&#xA;    name: Laptop&#xA;    price: 1500&#xA;    tags[1]: electronics&#xA;  - id: 102&#xA;    name: Phone&#xA;    price: 800&#xA;    tags[1]: mobile&#xA;&lt;/pre&gt;&lt;h2 class=wp-block-heading&gt;4. Reading and Writing TOON Files&lt;/h2&gt;&lt;p&gt;Reading and writing TOON files in Java involves using standard file I/O operations. This allows applications to persist structured data in TOON format and later retrieve and parse it into Java objects.&lt;pre class=brush:java&gt;public class FileExample {&#xA;&#xA;    private static final String FILE_PATH = &amp;#34;product.toon&amp;#34;;&#xA;&#xA;    public static void main(String[] args) throws Exception {&#xA;&#xA;        List&amp;lt;Product&amp;gt; products = List.of(&#xA;                new Product(101, &amp;#34;Laptop&amp;#34;, 1500.00, List.of(&amp;#34;electronics&amp;#34;, &amp;#34;computing&amp;#34;)),&#xA;                new Product(102, &amp;#34;Phone&amp;#34;, 800, List.of(&amp;#34;mobile&amp;#34;))&#xA;        );&#xA;&#xA;        // Convert Java object to TOON&#xA;        String toonData = JToon.encode(products);&#xA;&#xA;        // Write TOON data to file&#xA;        Files.writeString(Path.of(FILE_PATH), toonData);&#xA;&#xA;        IO.println(&amp;#34;TOON data written to file:&amp;#34;);&#xA;        IO.println(toonData);&#xA;&#xA;        // Read TOON data from file&#xA;        String readData = Files.readString(Path.of(FILE_PATH));&#xA;&#xA;        // Convert TOON back to Java object&#xA;        Object parsedProduct = JToon.decode(readData);&#xA;&#xA;        IO.println(&amp;#34;\nParsed object from file:&amp;#34;);&#xA;        IO.println(&amp;#34;ID: &amp;#34; + parsedProduct);&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;This example demonstrates the complete lifecycle of TOON data handling. A &lt;code&gt;Product&lt;/code&gt; object is first created and serialized into TOON format using &lt;code&gt;JToon.encode()&lt;/code&gt;. The resulting string is written to a file using &lt;code&gt;Files.writeString()&lt;/code&gt;. The file is then read back into memory, and &lt;code&gt;JToon.decode()&lt;/code&gt; is used to reconstruct the original Java object.&lt;h2 class=wp-block-heading&gt;5. OpenAI API Integration&lt;/h2&gt;&lt;p&gt;TOON format is highly effective when interacting with Large Language Models (LLMs) such as OpenAI because it reduces token usage while preserving structured data. In Java applications, TOON can be used to encode domain data before sending it as part of a prompt, improving efficiency and reducing API costs.&lt;p&gt;To integrate OpenAI with Java and use TOON, include the required dependencies:&lt;pre class=brush:xml&gt;        &amp;lt;dependency&amp;gt;&#xA;            &amp;lt;groupId&amp;gt;com.theokanning.openai-gpt3-java&amp;lt;/groupId&amp;gt;&#xA;            &amp;lt;artifactId&amp;gt;service&amp;lt;/artifactId&amp;gt;&#xA;            &amp;lt;version&amp;gt;0.18.2&amp;lt;/version&amp;gt;&#xA;            &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;&#xA;        &amp;lt;/dependency&amp;gt;&#xA;&lt;/pre&gt;&lt;p&gt;This dependency provides the OpenAI Java client used to communicate with the OpenAI API. It includes the necessary classes for building requests, sending prompts, and handling responses from language models. By adding it to the project, the application can integrate AI capabilities alongside TOON data processing.&lt;p&gt;&lt;strong&gt;Example Code&lt;/strong&gt;&lt;pre class=brush:java&gt;public class ToonOpenAiExample {&#xA;&#xA;    public static void main(String[] args) {&#xA;&#xA;        // Create Product Data&#xA;        List&amp;lt;Product&amp;gt; products = List.of(&#xA;                new Product(101, &amp;#34;Laptop&amp;#34;, 1500.00, List.of(&amp;#34;electronics&amp;#34;, &amp;#34;computing&amp;#34;)),&#xA;                new Product(102, &amp;#34;Phone&amp;#34;, 800.00, List.of(&amp;#34;mobile&amp;#34;))&#xA;        );&#xA;&#xA;        // Convert Java objects to TOON&#xA;        String toonData = JToon.encode(products);&#xA;&#xA;        // Build Prompt&#xA;        String prompt = &amp;#34;Analyze the following product data and suggest pricing improvements:\n\n&amp;#34;&#xA;                + toonData;&#xA;&#xA;        // Initialize OpenAI Service&#xA;        OpenAiService service = new OpenAiService(&amp;#34;your-api-key&amp;#34;);&#xA;&#xA;        // Create Chat Request&#xA;        ChatCompletionRequest request = ChatCompletionRequest.builder()&#xA;                .model(&amp;#34;gpt-4&amp;#34;)&#xA;                .messages(List.of(&#xA;                        new ChatMessage(&amp;#34;user&amp;#34;, prompt)&#xA;                ))&#xA;                .build();&#xA;&#xA;        // Execute Request&#xA;        String response = service.createChatCompletion(request)&#xA;                .getChoices()&#xA;                .get(0)&#xA;                .getMessage()&#xA;                .getContent();&#xA;&#xA;        // Print Response&#xA;        IO.println(&amp;#34;LLM Response:\n&amp;#34; + response);&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;This example demonstrates a complete workflow for integrating TOON with the OpenAI API. First, a list of &lt;code&gt;Product&lt;/code&gt; objects is created and converted into TOON format using &lt;code&gt;JToon.encode()&lt;/code&gt;. The TOON data is then embedded into a prompt, which is sent to the OpenAI API using the Java client. Finally, the response from the model is retrieved and printed to the console.&lt;p&gt;&lt;strong&gt;Example TOON Sent to OpenAI&lt;/strong&gt;&lt;pre class=brush:plain&gt;products[2]{id,name,price,tags}:&#xA;  101,Laptop,1500.0,electronics|computing&#xA;  102,Phone,800.0,mobile&#xA;&lt;/pre&gt;&lt;p&gt;This TOON representation is significantly more compact than JSON, as it avoids repeating field names and minimizes punctuation while still preserving structure.&lt;h3 class=wp-block-heading&gt;Key Benefits of This Integration&lt;/h3&gt;&lt;p&gt;Using TOON in OpenAI integrations provides several advantages:&lt;ul class=wp-block-list&gt;&lt;li&gt;Reduced token usage compared to JSON&lt;li&gt;Improved readability of structured prompts&lt;li&gt;Better performance and lower API costs&lt;/ul&gt;&lt;h2 class=wp-block-heading&gt;6. Conclusion&lt;/h2&gt;&lt;p&gt;In this article, TOON format was introduced as a compact and efficient alternative to JSON for handling structured data in Java applications. The discussion covered its syntax, advantages, and practical implementation using JToon, including parsing, generating, and working with arrays and files. Additionally, the integration with the OpenAI API demonstrated how TOON can improve token efficiency when interacting with Large Language Models.&lt;h2 class=wp-block-heading&gt;7. Download the Source Code&lt;/h2&gt;&lt;p&gt;This article covered using TOON format in Java as an alternative approach to JSON for handling structured data.&lt;div class=download&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;br&gt;You can download the full source code of this example here: &lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/toon-java-demo.zip&gt;&lt;strong&gt;Java JSON TOON format libraries&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-XsHzw4dB7AxuaWiD lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=XsHzw4dB7AxuaWiD data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-6MJPyfnNIcYaOq9t-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-6MJPyfnNIcYaOq9t-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-6MJPyfnNIcYaOq9t-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png fetchpriority=high decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-XsHzw4dB7AxuaWiD lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=XsHzw4dB7AxuaWiD data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-XsHzw4dB7AxuaWiD value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/api-integration rel=tag&gt;API Integration&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/data-serialization rel=tag&gt;Data Serialization&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/json rel=tag&gt;JSON&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/json-alternative rel=tag&gt;json alternative&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/llm rel=tag&gt;llm&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/openai rel=tag&gt;openai&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/toon rel=tag&gt;TOON&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/toon-format rel=tag&gt;toon format&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Omozegie Aziegbe</author>
      <guid>https://www.javacodegeeks.com/getting-started-with-toon-format-in-java.html</guid>
      <pubDate>Thu, 30 Apr 2026 08:38:13 +0000</pubDate>
    </item>
    <item>
      <title>Prompt Engineering Is Not Enough: How Java Developers Should Structure AI Agent Workflows Using Embabel or Koog</title>
      <link>https://www.javacodegeeks.com/2026/04/prompt-engineering-is-not-enough-how-java-developers-should-structure-ai-agent-workflows-using-embabel-or-koog.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java&gt;Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;Prompt Engineering Is Not Enough: How Java Developers Should Structure AI Agent Workflows Using Embabel or Koog&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-7&#34; href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;Prompt Engineering Is Not Enough: How Java Developers Should Structure AI Agent Workflows Using Embabel or Koog&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;div class=&#34;stream-item stream-item-above-post-content&#34;&gt;&lt;div class=stream-item-size&gt;&lt;div id=adngin-in-post-0 style=&#34;float:left; margin-right:20px; margin-bottom:10px; width:300px; height:274px;&#34;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Goal-oriented planning, tool registration, and multi-step task execution — finally, on the JVM.&lt;/em&gt;&lt;h2 class=wp-block-heading id=problem&gt;1. The Problem With Prompt-Only Thinking&lt;/h2&gt;&lt;p&gt;If you have spent any real time building LLM-powered features in Java, you have almost certainly run into the same ceiling. At first, a clever prompt seems to solve everything. You craft a system message, shape the user turn, sprinkle in some examples, and — for a while — it works surprisingly well. Then, as soon as the task gets more complex, the cracks appear. The model forgets earlier steps. It invents data you did not give it. It confidently completes the wrong goal. Moreover, when it does fail, you have very little idea &lt;em&gt;why&lt;/em&gt;.&lt;p&gt;This is not a model quality problem. It is an architectural problem. As Rod Johnson — the creator of the Spring Framework — put it when describing why he built &lt;a href=https://github.com/embabel/embabel-agent target=_blank rel=&#34;noreferrer noopener&#34;&gt;Embabel&lt;/a&gt;: &lt;em&gt;“Without agentic systems, we are more like alchemists than engineers, our prompts more like incantations.”&lt;/em&gt; That framing resonates with any developer who has spent an afternoon chasing a flaky prompt through staging logs.&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;Prompt engineering optimises a single LLM call. Agent frameworks orchestrate sequences of calls, tools, and decisions — and they do it in a way that is testable, explainable, and survives refactoring. These are entirely different problems.&lt;/blockquote&gt;&lt;p&gt;For years, Java developers who wanted agent capabilities faced an uncomfortable choice: adopt Python frameworks like LangChain or CrewAI and maintain a polyglot stack, or build their own orchestration on top of &lt;a href=https://spring.io/projects/spring-ai target=_blank rel=&#34;noreferrer noopener&#34;&gt;Spring AI&lt;/a&gt; or &lt;a href=https://github.com/langchain4j/langchain4j target=_blank rel=&#34;noreferrer noopener&#34;&gt;LangChain4j&lt;/a&gt; — useful primitives, but not full agent planners. That gap has now closed, and it closed quickly.&lt;h2 class=wp-block-heading id=landscape&gt;2. The New JVM Agent Landscape&lt;/h2&gt;&lt;p&gt;Two frameworks arrived within months of each other in 2025, and both came from credible, well-resourced teams. &lt;strong&gt;Embabel&lt;/strong&gt;, launched by Rod Johnson in May 2025, built on Spring Boot and written in Kotlin with first-class Java interoperability. And &lt;strong&gt;Koog&lt;/strong&gt;, open-sourced by JetBrains at KotlinConf 2025, built entirely on Kotlin coroutines with a graph-based strategy model that targets not just the JVM, but also Android, iOS, and WebAssembly via Kotlin Multiplatform.&lt;p&gt;By contrast, the earlier generation of JVM AI tooling — Spring AI and LangChain4j — deliberately sits lower in the stack. As the &lt;a href=https://www.javacodegeeks.com/2026/03/5-latest-java-trends-to-keep-your-eye-on-in-2026.html target=_blank rel=&#34;noreferrer noopener&#34;&gt;Java Code Geeks 2026 trends report&lt;/a&gt; summarises it: &lt;em&gt;“Spring AI is the pragmatic entry point. Embabel and Koog are for teams building serious multi-step agent workflows on the JVM.”&lt;/em&gt; Think of the relationship the same way you think of servlets versus Spring MVC — the lower layer is still there, but most developers should not be coding directly against it.&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;&lt;strong&gt;The stack, visualised&lt;/strong&gt;LLM API → Spring AI / LangChain4j (primitives) →&lt;strong&gt;Embabel / Koog&lt;/strong&gt;(agent orchestration) → your business application. The middle layer is where planning, tool registration, and multi-step execution actually live.&lt;/blockquote&gt;&lt;p class=has-text-align-center&gt;&lt;strong&gt;JVM AI Framework GitHub Stars — Comparative Growth (2025)&lt;/strong&gt;&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-33-46.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-33-46.png fetchpriority=high decoding=async width=573 height=268 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-33-46.png alt class=wp-image-143039 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-33-46.png 573w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-33-46-300x140.png 300w&#34; data-sizes=&#34;(max-width: 573px) 100vw, 573px&#34;&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async width=573 height=268 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-33-46.png alt class=wp-image-143039 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-33-46.png 573w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-33-46-300x140.png 300w&#34; sizes=&#34;(max-width: 573px) 100vw, 573px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption class=wp-element-caption&gt;Approximate star counts at key milestones, based on public repository data and reported figures from InfoQ and The New Stack.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;h2 class=wp-block-heading id=embabel&gt;3. Embabel in Depth: GOAP Meets Spring&lt;/h2&gt;&lt;p&gt;Embabel is, in essence, Rod Johnson’s answer to a question he believes the Python ecosystem has not answered well: &lt;em&gt;how do you bring engineering discipline to agentic AI?&lt;/em&gt; The framework’s most distinctive idea is that it separates &lt;strong&gt;planning&lt;/strong&gt; from &lt;strong&gt;execution&lt;/strong&gt;. Rather than asking an LLM to decide what to do next, Embabel delegates that decision to a deterministic AI algorithm borrowed from video game development called &lt;a href=https://en.wikipedia.org/wiki/Goal-oriented_action_planning target=_blank rel=&#34;noreferrer noopener&#34;&gt;Goal-Oriented Action Planning (GOAP)&lt;/a&gt;.&lt;p&gt;In a game engine, GOAP lets an NPC character work out a sequence of actions — pick up weapon, find cover, flank the enemy — given a set of preconditions and a desired goal state. Embabel applies exactly this algorithm to enterprise workflows. The developer defines &lt;strong&gt;actions&lt;/strong&gt; (what the agent can do), &lt;strong&gt;conditions&lt;/strong&gt; (what must be true before or after an action), and &lt;strong&gt;goals&lt;/strong&gt; (the desired end state). The GOAP planner then computes an optimal path through those actions at runtime — and replans after every step, forming what Johnson calls an &lt;a href=https://medium.com/@springrod/embabel-a-new-agent-platform-for-the-jvm-1c83402e0014 target=_blank rel=&#34;noreferrer noopener&#34;&gt;OODA loop&lt;/a&gt; (Observe, Orient, Decide, Act).&lt;p&gt;Furthermore, because the planner is a non-LLM algorithm, the decisions it makes are fully explainable. You can log exactly why the planner chose action B over action A, which is critical for any regulated or audited business process.&lt;h3 class=wp-block-heading&gt;Key Embabel Concepts at a Glance&lt;/h3&gt;&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Concept&lt;th class=has-text-align-left data-align=left&gt;What it does&lt;th class=has-text-align-left data-align=left&gt;Familiar Spring analogy&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;@AgentComponent&lt;td&gt;Marks a class as an agent that the platform can discover&lt;td&gt;@Service / @Component&lt;tr&gt;&lt;td&gt;@Action&lt;td&gt;Declares a method as a step the planner can use&lt;td&gt;@RequestMapping (a route the framework can invoke)&lt;tr&gt;&lt;td&gt;Goal&lt;td&gt;Desired end state; the planner works backward from here&lt;td&gt;Return type of a controller endpoint&lt;tr&gt;&lt;td&gt;Condition&lt;td&gt;A typed boolean checked before/after each action&lt;td&gt;@PreAuthorize / guard clause&lt;tr&gt;&lt;td&gt;Blackboard&lt;td&gt;Shared typed state that all actions read and write&lt;td&gt;The model object passed through a request pipeline&lt;tr&gt;&lt;td&gt;AgentPlatform&lt;td&gt;Bootstraps and executes agent flows (Focused / Closed / Open)&lt;td&gt;DispatcherServlet&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;Beyond GOAP, Embabel’s 2025 year-end update added a &lt;strong&gt;Utility planner&lt;/strong&gt; (for open-ended exploration without a fixed goal) and a &lt;strong&gt;Supervisor pattern&lt;/strong&gt; that maps directly to the LangGraph supervisor-with-workers model — giving teams migrating from Python a familiar mental model while gaining type safety and testability that Python frameworks simply cannot match at the JVM level.&lt;p&gt;For a practical starting point, the &lt;a href=https://www.baeldung.com/java-embabel-agent-framework target=_blank rel=&#34;noreferrer noopener&#34;&gt;Baeldung Embabel tutorial&lt;/a&gt; walks through building a quiz-generation agent, and the &lt;a href=https://www.danvega.dev/blog/2026/04/02/embabel-first-look target=_blank rel=&#34;noreferrer noopener&#34;&gt;Dan Vega first-look guide&lt;/a&gt; covers tool registration and MCP server integration in detail. Both are solid starting points before you touch the &lt;a href=https://github.com/embabel/embabel-agent target=_blank rel=&#34;noreferrer noopener&#34;&gt;official GitHub repository&lt;/a&gt;.&lt;h2 class=wp-block-heading id=koog&gt;4. Koog in Depth: Coroutines Meet Agent Graphs&lt;/h2&gt;&lt;p&gt;JetBrains took a different architectural path. Where Embabel delegates planning to a deterministic algorithm, &lt;a href=https://github.com/JetBrains/koog target=_blank rel=&#34;noreferrer noopener&#34;&gt;Koog&lt;/a&gt; asks developers to define the agent’s strategy as an explicit &lt;strong&gt;directed graph of nodes&lt;/strong&gt;. Each node performs one operation — calling an LLM, invoking a tool, summarising message history, routing to a subgraph — and edges between nodes define flow control including loops, branches, fallbacks, and parallel paths.&lt;div style=&#34;display:inline-block; margin: 15px 0;&#34;&gt;&lt;div id=adngin-JavaCodeGeeks_incontent_video-0 style=display:inline-block;&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;This node-edge model will feel immediately familiar to anyone who has worked with LangGraph. However, Koog’s implementation is considerably more idiomatic for JVM developers because it is built entirely on &lt;strong&gt;Kotlin coroutines&lt;/strong&gt;, which means concurrency, streaming responses, and parallel tool calls all compose naturally without callback hell or thread management. Additionally, Koog ships with built-in history compression — an important practical detail when running long agentic sessions where raw message history would otherwise exhaust the model’s context window.&lt;p&gt;Arguably, Koog’s biggest differentiator is its multiplatform reach. Because it is built on &lt;a href=https://kotlinlang.org/docs/multiplatform.html target=_blank rel=&#34;noreferrer noopener&#34;&gt;Kotlin Multiplatform&lt;/a&gt;, the same agent logic can run on the JVM backend, on Android, on iOS, and even in the browser via WebAssembly — a capability no other JVM agent framework currently offers.&lt;h3 class=wp-block-heading&gt;What Koog Ships Out of the Box&lt;/h3&gt;&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Feature&lt;th class=has-text-align-left data-align=left&gt;Details&lt;th class=has-text-align-left data-align=left&gt;Version introduced&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Graph-based strategies&lt;td&gt;Nodes + edges with loops, branches, parallel paths&lt;td&gt;0.1.0 (initial)&lt;tr&gt;&lt;td&gt;Non-graph strategy API&lt;td&gt;Define strategies as Kotlin extension functions without explicit wiring&lt;td&gt;0.5.0&lt;tr&gt;&lt;td&gt;MCP integration&lt;td&gt;Native Model Context Protocol support via Kotlin MCP SDK&lt;td&gt;0.1.0&lt;tr&gt;&lt;td&gt;A2A protocol&lt;td&gt;Agent-to-Agent communication; agents discover and call each other&lt;td&gt;0.5.0 (Oct 2025)&lt;tr&gt;&lt;td&gt;Persistence &amp;amp; checkpointing&lt;td&gt;Snapshot agent state; resume exactly where execution paused&lt;td&gt;0.4.0&lt;tr&gt;&lt;td&gt;History compression&lt;td&gt;Intelligent summarisation to manage context window usage&lt;td&gt;0.1.0&lt;tr&gt;&lt;td&gt;OpenTelemetry observability&lt;td&gt;Built-in exporters for Langfuse and W&amp;amp;B Weave&lt;td&gt;0.3.0&lt;tr&gt;&lt;td&gt;AIAgentService&lt;td&gt;Manage multiple uniform running agents as state-managed services&lt;td&gt;0.5.0&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;The JetBrains team has also made it a point to publish a &lt;a href=https://blog.jetbrains.com/ai/2025/11/building-ai-agents-in-kotlin-part-1-a-minimal-coding-agent/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;multi-part blog series&lt;/a&gt; building a real coding agent step by step — arguably the most readable practical onboarding content for any JVM agent framework available today. Koog’s documentation lives at &lt;a href=https://docs.koog.ai/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;docs.koog.ai&lt;/a&gt;.&lt;h2 class=wp-block-heading id=comparison&gt;5. Side-by-Side Comparison&lt;/h2&gt;&lt;p&gt;Both frameworks solve the same high-level problem, but they optimise for different teams and different kinds of agents. Rather than declaring a winner, the table below lays out the architectural tradeoffs as clearly as possible so that you can make the choice that fits your stack.&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Dimension&lt;th class=has-text-align-left data-align=left&gt;Embabel&lt;th class=has-text-align-left data-align=left&gt;Koog&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Planning model&lt;td&gt;GOAP (deterministic, non-LLM)&lt;td&gt;Explicit graph / coroutines&lt;tr&gt;&lt;td&gt;Primary language&lt;td&gt;Kotlin + excellent Java interop&lt;td&gt;Kotlin (Java API available)&lt;tr&gt;&lt;td&gt;Spring integration&lt;td&gt;Deep — built on Spring Boot&lt;td&gt;Available (Spring Boot + Ktor adapters)&lt;tr&gt;&lt;td&gt;Multiplatform&lt;td&gt;JVM only&lt;td&gt;JVM, Android, iOS, JS, WASM&lt;tr&gt;&lt;td&gt;History / memory&lt;td&gt;Domain blackboard; conversation memory is app-level concern&lt;td&gt;Built-in history compression + RAG support&lt;tr&gt;&lt;td&gt;Observability&lt;td&gt;Spring Actuator; logging; prompt testing library&lt;td&gt;OpenTelemetry, Langfuse, W&amp;amp;B Weave out of the box&lt;tr&gt;&lt;td&gt;Fault tolerance&lt;td&gt;Replanning after each action (OODA loop)&lt;td&gt;Checkpointing, rollback tool side-effects, retries&lt;tr&gt;&lt;td&gt;License&lt;td&gt;Apache 2.0&lt;td&gt;Apache 2.0&lt;tr&gt;&lt;td&gt;Planner explainability&lt;td&gt;High — non-LLM algorithm, fully loggable&lt;td&gt;Medium — graph is explicit but LLM drives node decisions&lt;tr&gt;&lt;td&gt;Best fit for&lt;td&gt;Spring teams with complex domain models&lt;td&gt;Kotlin-first teams; multiplatform or mobile deployment&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;As Rod Johnson himself noted in the &lt;a href=https://github.com/embabel/embabel-agent/discussions/708 target=_blank rel=&#34;noreferrer noopener&#34;&gt;GitHub discussion comparing the two&lt;/a&gt;: &lt;em&gt;“For Java developers, especially those using Spring, the choice is obviously Embabel. For Kotlin developers it probably comes down to whether Koog’s explicit node-edge wiring is what they’re looking for.”&lt;/em&gt;&lt;h2 class=wp-block-heading id=goal-planning&gt;6. Goal-Oriented Planning in Practice&lt;/h2&gt;&lt;p&gt;Let us make goal-oriented planning concrete with a realistic scenario: an order-processing agent that needs to validate a customer order, check inventory, apply pricing rules, and then dispatch a fulfilment event. Without a framework, you would write this as a waterfall of chained LLM calls or hand-coded state machines. With Embabel, you instead declare the pieces and let the planner sequence them.&lt;p&gt;Here is a simplified view of how Embabel’s annotations map to the planner’s vocabulary. Notice that the code is idiomatic Java — no XML, no special runner, just annotated methods that Spring and Embabel pick up automatically:&lt;p&gt;&lt;em&gt;Java · Embabel — Order Processing Agent (simplified)&lt;/em&gt;&lt;pre class=brush:java&gt;import com.embabel.agent.api.annotation.*;&#xA;import com.embabel.agent.api.common.OperationContext;&#xA;&#xA;@AgentComponent&#xA;public class OrderProcessingAgent {&#xA;&#xA;    // Action 1 — validate the incoming order&#xA;    // Precondition: an unvalidated order exists on the blackboard&#xA;    // Effect: a ValidatedOrder object is placed on the blackboard&#xA;    @Action(&#xA;        pre  = &amp;#34;order.status == &amp;#39;PENDING&amp;#39;&amp;#34;,&#xA;        post = &amp;#34;validatedOrder != null&amp;#34;&#xA;    )&#xA;    public ValidatedOrder validateOrder(Order order, OperationContext ctx) {&#xA;        // The LLM prompt is focused: just validation rules, nothing else&#xA;        return ctx.promptForObject(&#xA;            &amp;#34;Validate this order for completeness and fraud signals: &amp;#34; + order,&#xA;            ValidatedOrder.class&#xA;        );&#xA;    }&#xA;&#xA;    // Action 2 — check inventory (pure Java, no LLM involved)&#xA;    @Action(&#xA;        pre  = &amp;#34;validatedOrder != null&amp;#34;,&#xA;        post = &amp;#34;inventoryResult != null&amp;#34;&#xA;    )&#xA;    public InventoryResult checkInventory(ValidatedOrder validatedOrder,&#xA;                                          InventoryService inventory) {&#xA;        return inventory.check(validatedOrder.items());&#xA;    }&#xA;&#xA;    // Goal — what the planner is trying to reach&#xA;    @AchievesGoal&#xA;    @Action(&#xA;        pre = &amp;#34;inventoryResult.allInStock == true&amp;#34;&#xA;    )&#xA;    public FulfilmentEvent dispatch(ValidatedOrder order,&#xA;                                    InventoryResult inv) {&#xA;        return new FulfilmentEvent(order, inv.reservationId());&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;There are several things worth noticing here. First, each action has a &lt;strong&gt;narrow, focused responsibility&lt;/strong&gt;. The LLM in &lt;code&gt;validateOrder&lt;/code&gt; is only asked about fraud and completeness — not inventory, not pricing. That focus makes the prompt far more reliable than one giant prompt trying to do everything at once. Second, &lt;code&gt;checkInventory&lt;/code&gt; involves &lt;strong&gt;no LLM at all&lt;/strong&gt; — it is plain Java calling a service. Embabel happily mixes LLM-powered and code-driven actions in the same plan. Third, you never write the sequence yourself; the GOAP planner infers it from the preconditions and postconditions at runtime.&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;Embabel’s planner evaluates preconditions as typed expressions against the blackboard. Keep them to data-presence checks (&lt;code&gt;validatedOrder != null&lt;/code&gt;) rather than complex business rules. Move logic into the action methods themselves, where it is testable and debuggable.&lt;/blockquote&gt;&lt;p&gt;The equivalent in Koog takes a graph-first approach. Instead of declaring preconditions, you wire nodes together explicitly. Here is a minimal Koog strategy for the same flow:&lt;p&gt;&lt;em&gt;Kotlin · Koog — Order Processing Strategy (simplified)&lt;/em&gt;&lt;pre class=brush:java&gt;import ai.koog.agents.core.agent.AIAgent&#xA;import ai.koog.agents.core.agent.config.AIAgentConfig&#xA;import ai.koog.agents.core.tools.ToolRegistry&#xA;import ai.koog.prompt.executor.clients.openai.OpenAIModels&#xA;import ai.koog.prompt.executor.llms.all.simpleOpenAIExecutor&#xA;&#xA;// Step 1 — define tools as annotated functions&#xA;val toolRegistry = ToolRegistry {&#xA;    tool(::validateOrderTool)   // wraps your validation logic&#xA;    tool(::checkInventoryTool)  // wraps InventoryService.check()&#xA;    tool(::dispatchOrderTool)   // wraps FulfilmentEvent creation&#xA;}&#xA;&#xA;// Step 2 — configure the agent&#xA;val config = AIAgentConfig(&#xA;    prompt = ai.koog.agents.core.agent.config.PromptConfig(&#xA;        systemPrompt = &amp;#34;&amp;#34;&amp;#34;&#xA;            You are an order processing agent. &#xA;            Use the available tools in sequence to validate, check &#xA;            inventory, and dispatch orders. Stop when dispatched.&#xA;        &amp;#34;&amp;#34;&amp;#34;.trimIndent()&#xA;    )&#xA;)&#xA;&#xA;// Step 3 — create and run the agent&#xA;val agent = AIAgent(&#xA;    promptExecutor = simpleOpenAIExecutor(System.getenv(&amp;#34;OPENAI_API_KEY&amp;#34;)),&#xA;    llmModel       = OpenAIModels.Chat.GPT4o,&#xA;    toolRegistry   = toolRegistry,&#xA;    config         = config&#xA;)&#xA;&#xA;// Step 4 — run with a specific order input&#xA;val result = agent.run(&amp;#34;Process order: ${order.toJson()}&amp;#34;)&#xA;println(result)&#xA;&lt;/pre&gt;&lt;p&gt;In Koog, the LLM itself decides which tool to call and in what order, guided by the system prompt and the tool descriptions. The graph-based strategy API adds more explicit control when you need branches or loops. This is a meaningful philosophical difference: Embabel’s planner is deterministic by design, while Koog’s default single-agent pattern trusts the model to sequence tools correctly — which is faster to prototype but harder to audit in regulated contexts.&lt;h2 class=wp-block-heading id=tools&gt;7. Tool Registration and Multi-Step Execution&lt;/h2&gt;&lt;p&gt;Tool registration is where both frameworks shine brightest, and where the contrast with raw prompt engineering is most visible. Instead of describing a capability in natural language and hoping the model extracts the right parameters, you register a typed function that the framework exposes to the model in a structured way. The model receives a JSON schema describing the tool’s inputs and outputs; it calls the tool by name with typed arguments; the framework validates the call, executes the function, and returns the result — all without you writing any serialisation code.&lt;p&gt;&lt;strong&gt;1. Define your tool as a typed function&lt;/strong&gt;&lt;ol class=wp-block-list&gt;&lt;/ol&gt;&lt;p&gt;In Embabel, any Spring bean method annotated with &lt;code&gt;@Tool&lt;/code&gt; is automatically registered. In Koog, you pass a function reference to &lt;code&gt;ToolRegistry&lt;/code&gt;. Both frameworks generate the JSON schema from the method signature using reflection — no manual schema writing required.&lt;p&gt;&lt;strong&gt;2. The planner or agent selects the tool&lt;/strong&gt;&lt;p&gt;Embabel’s GOAP planner picks tools based on which action’s preconditions are currently satisfied. Koog’s LLM-driven agent selects tools by reasoning over the tool descriptions in the system prompt — the same pattern used by OpenAI’s function-calling API.&lt;p&gt;&lt;strong&gt;3. The framework validates and executes&lt;/strong&gt;&lt;p&gt;Both frameworks deserialise the model’s tool-call arguments into your typed objects before execution. If the model provides malformed arguments, the framework catches that before your code ever sees it — a safety net that raw prompt-parsing utterly lacks.&lt;p&gt;&lt;strong&gt;4. Results flow back into the next step&lt;/strong&gt;&lt;p&gt;In Embabel, the return value of an &lt;code&gt;@Action&lt;/code&gt; is placed on the typed blackboard, making it available to subsequent actions. In Koog, it is appended to the message history as a tool result, and the agent reasons over it in the next iteration of its execution loop.&lt;p&gt;&lt;strong&gt;5. MCP servers extend your tool catalogue&lt;/strong&gt;&lt;p&gt;Both frameworks support the &lt;a href=https://modelcontextprotocol.io/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;Model Context Protocol&lt;/a&gt;. This means any MCP-compatible server — databases, APIs, file systems — can be connected as a tool source without writing custom integration code.&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;A common misconception is that MCP alone is enough to build agents. As Johnson has argued, MCP solves tool &lt;em&gt;discoverability&lt;/em&gt; and &lt;em&gt;invocation&lt;/em&gt; — but it does not solve planning, sequencing, error recovery, or explainability. That is precisely what Embabel and Koog add on top.&lt;/blockquote&gt;&lt;h2 class=wp-block-heading id=adoption&gt;8. Adoption in Numbers&lt;/h2&gt;&lt;p&gt;Both frameworks are young, but the signals from the developer community are already clear. Embabel crossed 3,000 GitHub stars within its first year, a trajectory that mirrors early Spring adoption in enterprise Java circles. Meanwhile, the JetBrains team reports that Koog is already used internally to power the AI stack behind Junie (their AI coding agent) and AI Assistant in IntelliJ IDEA — giving it an unusually large and demanding real-world workload for an open-source framework less than a year old.&lt;p class=has-text-align-center&gt;&lt;strong&gt;Perceived Production-Readiness: JVM AI Frameworks (Developer Survey Proxy)&lt;/strong&gt;&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-37-47.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-37-47.png decoding=async width=295 height=277 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-37-47.png alt class=wp-image-143040&gt;&lt;noscript&gt;&lt;img decoding=async width=295 height=277 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-23_20-37-47.png alt class=wp-image-143040&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption class=wp-element-caption&gt;Composite score (0–10) based on InfoQ Java Trends 2025, The New Stack developer interviews, and GitHub issue/PR activity as of early 2026. Higher = more production-ready.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Interestingly, Deutsche Telekom has already built one of Europe’s largest LLM-powered customer-service chatbots on the Kotlin/JVM stack — an early signal that enterprise teams are not waiting for full framework maturity before shipping. As JetBrains’ tech lead Vadim Briliantov noted in an interview with &lt;a href=https://thenewstack.io/java-developers-get-multiple-paths-to-building-ai-agents/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;The New Stack&lt;/a&gt;: &lt;em&gt;“For many enterprises, Python is not considered a production-ready language, even though most modern AI tools are built on it.”&lt;/em&gt; That sentiment is increasingly shaping procurement decisions at the platform level.&lt;h2 class=wp-block-heading id=which&gt;9. Which Framework Should You Choose?&lt;/h2&gt;&lt;p&gt;The honest answer is that neither framework is universally superior. They optimise for different team profiles and different agent architectures, so the right choice comes down to a few concrete questions.&lt;p&gt;&lt;strong&gt;Choose Embabel if…&lt;/strong&gt;&lt;p&gt;Your team is deep in the Spring ecosystem and wants to add agent capabilities to existing Spring applications with minimum friction. Your domain is complex with rich typed objects that the planner can reason about. You need high explainability — regulatory, compliance, or audit requirements mean you must be able to trace every planning decision. You are not targeting mobile or browser runtimes.&lt;p&gt;&lt;strong&gt;Choose Koog if…&lt;/strong&gt;&lt;p&gt;Your team is Kotlin-first and values coroutines as a native concurrency model. You need multiplatform deployment — backend &lt;em&gt;and&lt;/em&gt; Android, or backend &lt;em&gt;and&lt;/em&gt; browser via WASM. You want built-in history compression and out-of-the-box OpenTelemetry integration without writing adapters. You prefer the explicit control of graph-based wiring over automatic GOAP planning.&lt;p&gt;As the &lt;a href=https://www.javacodegeeks.com/2026/03/the-first-jvm-native-ai-agent-frameworks-and-why-rod-johnson-built-one-of-them.html target=_blank rel=&#34;noreferrer noopener&#34;&gt;JCG deep-dive analysis&lt;/a&gt; from March 2026 concludes: &lt;em&gt;“Spring-deep teams adding intelligence to existing services will likely reach for Embabel first; Kotlin-first teams building new agents or targeting mobile will likely reach for Koog.”&lt;/em&gt; That framing holds up well in practice.&lt;p&gt;In either case, before you start a new project, it is worth checking the &lt;a href=https://github.com/embabel/embabel-agent/releases target=_blank rel=&#34;noreferrer noopener&#34;&gt;Embabel releases page&lt;/a&gt; and the &lt;a href=https://github.com/JetBrains/koog/releases target=_blank rel=&#34;noreferrer noopener&#34;&gt;Koog releases page&lt;/a&gt; for the latest versions — both frameworks have been shipping patch releases weekly throughout early 2026, and APIs are still evolving.&lt;h2 class=wp-block-heading&gt;10. What We Have Learned&lt;/h2&gt;&lt;p&gt;This article has covered a lot of ground, so let us bring it together in one place before you move on.&lt;ul class=wp-block-list&gt;&lt;li&gt;Prompt engineering alone cannot deliver the reliability, testability, or explainability that enterprise Java applications require from AI workflows. Agent frameworks are not optional once complexity grows.&lt;li&gt;Embabel, from Spring creator Rod Johnson, introduces Goal-Oriented Action Planning — a deterministic, non-LLM algorithm that plans sequences of typed actions toward a declared goal. It is built on Spring Boot, offers excellent Java interoperability, and is the natural choice for Spring-heavy teams.&lt;li&gt;Koog, from JetBrains, takes a graph-based, coroutine-native approach that gives Kotlin developers explicit wiring control, built-in history compression, and Kotlin Multiplatform reach across backend, Android, iOS, and browser targets.&lt;li&gt;Both frameworks sit above Spring AI and LangChain4j in the stack, adding the planning and orchestration layer those lower-level libraries intentionally omit.&lt;li&gt;Tool registration in both frameworks is typed, schema-driven, and MCP-compatible — a significant step beyond raw function-calling or prompt-described capabilities.&lt;li&gt;The choice between them is primarily a team profile decision: Spring-first teams naturally gravitate to Embabel; Kotlin-first or multiplatform teams naturally gravitate to Koog. Neither is wrong.&lt;/ul&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-6Q7Uyvqr2JtpwkRo lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=6Q7Uyvqr2JtpwkRo data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-bRRIFMFHrIGzAe7E-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-bRRIFMFHrIGzAe7E-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-bRRIFMFHrIGzAe7E-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;noscript&gt;&lt;img decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-6Q7Uyvqr2JtpwkRo lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=6Q7Uyvqr2JtpwkRo data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-6Q7Uyvqr2JtpwkRo value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/ai-agent-frameworks rel=tag&gt;AI Agent Frameworks&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/goal-oriented-action-planning rel=tag&gt;Goal-Oriented Action Planning&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/java-kotlin-jvm rel=tag&gt;Java &amp;amp; Kotlin JVM&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Eleftheria Drosopoulou</author>
      <guid>https://www.javacodegeeks.com/2026/04/prompt-engineering-is-not-enough-how-java-developers-should-structure-ai-agent-workflows-using-embabel-or-koog.html</guid>
      <pubDate>Thu, 30 Apr 2026 05:32:00 +0000</pubDate>
    </item>
    <item>
      <title>Flex and Justify Items in Tailwind CSS</title>
      <link>https://www.javacodegeeks.com/flex-and-justify-items-in-tailwind-css.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/css&gt;CSS&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;Flex and Justify Items in Tailwind CSS&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-1904&#34; href=https://www.javacodegeeks.com/category/css&gt;CSS&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;Flex and Justify Items in Tailwind CSS&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;div class=&#34;stream-item stream-item-above-post-content&#34;&gt;&lt;div class=stream-item-size&gt;&lt;div id=adngin-in-post-0 style=&#34;float:left; margin-right:20px; margin-bottom:10px; width:300px; height:274px;&#34;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Modern web layouts require flexibility, responsiveness, and simplicity, all of which can be achieved efficiently with Flexbox. When combined with Tailwind CSS, building such layouts becomes faster and more intuitive. Let us delve into understanding how to use flex in Tailwind CSS and justify flex items.&lt;h2&gt;&lt;a name=section-1&gt;&lt;/a&gt;1. Flexbox Fundamentals with Tailwind CSS&lt;/h2&gt;&lt;p&gt;Flexbox (Flexible Box Layout) is a modern CSS layout model designed to arrange elements efficiently within a container, even when their size is unknown or dynamic. It simplifies complex layouts by providing a flexible way to align, distribute, and reorder items. Unlike older layout techniques such as floats or inline-block, Flexbox gives you precise control over both the direction and alignment of elements, making it ideal for building responsive user interfaces.&lt;ul&gt;&lt;li&gt;One-dimensional layout system (row or column)&lt;li&gt;Handles dynamic sizing (grow, shrink, basis)&lt;li&gt;Controls spacing, alignment, and distribution&lt;li&gt;Supports vertical and horizontal centering easily&lt;li&gt;Responsive by design without complex media queries&lt;/ul&gt;&lt;p&gt;Flexbox works with two main components:&lt;ul&gt;&lt;li&gt;Flex Container: The parent element that enables flex behavior using &lt;code&gt;display: flex&lt;/code&gt;&lt;li&gt;Flex Items: The child elements inside the container that follow flex rules&lt;/ul&gt;&lt;p&gt;Once a container is defined as flex, its children automatically become flexible items that can be aligned and distributed using various properties.&lt;h3&gt;1.1 Simplifying Flexbox with Tailwind CSS&lt;/h3&gt;&lt;p&gt;Tailwind CSS follows a utility-first approach, meaning you apply small, single-purpose classes directly in your HTML instead of writing custom CSS. This makes working with Flexbox significantly faster and more consistent. Each Tailwind class maps directly to a Flexbox property. For example:&lt;ul&gt;&lt;li&gt;&lt;code&gt;flex&lt;/code&gt; → &lt;code&gt;display: flex;&lt;/code&gt;&lt;li&gt;&lt;code&gt;flex-col&lt;/code&gt; → &lt;code&gt;flex-direction: column;&lt;/code&gt;&lt;li&gt;&lt;code&gt;justify-center&lt;/code&gt; → &lt;code&gt;justify-content: center;&lt;/code&gt;&lt;li&gt;&lt;code&gt;items-center&lt;/code&gt; → &lt;code&gt;align-items: center;&lt;/code&gt;&lt;/ul&gt;&lt;p&gt;This eliminates the need to remember complex CSS syntax and reduces context switching between HTML and CSS files. Another major advantage is responsiveness. Tailwind allows you to apply Flexbox utilities conditionally using breakpoints: &lt;code&gt;&amp;lt;div class=&amp;#34;flex flex-col md:flex-row&amp;#34;&amp;gt;&lt;/code&gt;. In this example, on small screens the items are stacked vertically, while on medium and larger screens the items are arranged horizontally.&lt;h3&gt;1.2 Getting Started with Flex in Tailwind&lt;/h3&gt;&lt;p&gt;To start using Flexbox in Tailwind, you simply add the &lt;code&gt;flex&lt;/code&gt; class to a container element.&lt;pre class=&#34;brush:html; wrap-lines:false;&#34;&gt;&amp;lt;div class=&amp;#34;flex&amp;#34;&amp;gt;&#xA;  &amp;lt;div&amp;gt;Item 1&amp;lt;/div&amp;gt;&#xA;  &amp;lt;div&amp;gt;Item 2&amp;lt;/div&amp;gt;&#xA;  &amp;lt;div&amp;gt;Item 3&amp;lt;/div&amp;gt;&#xA;&amp;lt;/div&amp;gt;&#xA;&lt;/pre&gt;&lt;p&gt;By default, the flex direction is set to &lt;code&gt;row&lt;/code&gt; (horizontal), items are aligned at the start, and each item takes only the space it needs. You can further control the layout using additional utility classes such as &lt;code&gt;flex-row&lt;/code&gt; or &lt;code&gt;flex-col&lt;/code&gt; to set the direction, &lt;code&gt;flex-wrap&lt;/code&gt; to allow items to wrap onto the next line, and &lt;code&gt;gap-4&lt;/code&gt; to add consistent spacing between items.&lt;div style=&#34;display:inline-block; margin: 15px 0;&#34;&gt;&lt;div id=adngin-JavaCodeGeeks_incontent_video-0 style=display:inline-block;&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;In summary, Tailwind CSS removes the complexity of Flexbox by giving you intuitive, reusable classes that make layout building faster, cleaner, and highly maintainable.&lt;h2&gt;&lt;a name=section-2&gt;&lt;/a&gt;2. Practical Flexbox Implementation&lt;/h2&gt;&lt;p&gt;Now that we have understood the core concepts of Flexbox and how Tailwind CSS simplifies its usage, let us look at a practical implementation. The following example demonstrates different Flexbox utilities in action to help you build responsive layouts efficiently.&lt;pre class=&#34;brush:html; wrap-lines:false;&#34;&gt;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html lang=&amp;#34;en&amp;#34;&amp;gt;&#xA;   &amp;lt;head&amp;gt;&#xA;      &amp;lt;meta charset=&amp;#34;UTF-8&amp;#34; /&amp;gt;&#xA;      &amp;lt;meta name=&amp;#34;viewport&amp;#34; content=&amp;#34;width=device-width, initial-scale=1.0&amp;#34; /&amp;gt;&#xA;      &amp;lt;title&amp;gt;Tailwind Flexbox Examples&amp;lt;/title&amp;gt;&#xA;      &amp;lt;script src=&amp;#34;https://cdn.tailwindcss.com&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&#xA;   &amp;lt;/head&amp;gt;&#xA;   &amp;lt;body class=&amp;#34;p-6 bg-gray-100&amp;#34;&amp;gt;&#xA;      &amp;lt;div class=&amp;#34;flex flex-col gap-6&amp;#34;&amp;gt;&#xA;         &amp;lt;!-- Flex Direction Example --&amp;gt;&#xA;         &amp;lt;div class=&amp;#34;flex flex-row gap-2 bg-gray-200 p-4&amp;#34;&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-blue-500 text-white p-4&amp;#34;&amp;gt;Row 1&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-blue-500 text-white p-4&amp;#34;&amp;gt;Row 2&amp;lt;/div&amp;gt;&#xA;         &amp;lt;/div&amp;gt;&#xA;&#xA;         &amp;lt;div class=&amp;#34;flex flex-col gap-2 bg-gray-200 p-4&amp;#34;&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-green-500 text-white p-4&amp;#34;&amp;gt;Column 1&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-green-500 text-white p-4&amp;#34;&amp;gt;Column 2&amp;lt;/div&amp;gt;&#xA;         &amp;lt;/div&amp;gt;&#xA;&#xA;         &amp;lt;!-- Justify &amp;amp; Align Example --&amp;gt;&#xA;         &amp;lt;div class=&amp;#34;flex justify-between items-center bg-gray-300 p-4 h-24&amp;#34;&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-red-500 text-white p-4&amp;#34;&amp;gt;Left&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-red-500 text-white p-4&amp;#34;&amp;gt;Right&amp;lt;/div&amp;gt;&#xA;         &amp;lt;/div&amp;gt;&#xA;&#xA;         &amp;lt;!-- Flex Sizing Example --&amp;gt;&#xA;         &amp;lt;div class=&amp;#34;flex gap-2 bg-gray-200 p-4&amp;#34;&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;basis-1/4 grow bg-purple-500 text-white p-4&amp;#34;&amp;gt;Grow&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;basis-1/4 shrink bg-purple-700 text-white p-4&amp;#34;&amp;gt;&#xA;               Shrink&#xA;            &amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;basis-1/2 bg-purple-900 text-white p-4&amp;#34;&amp;gt;Fixed&amp;lt;/div&amp;gt;&#xA;         &amp;lt;/div&amp;gt;&#xA;&#xA;         &amp;lt;!-- Wrap Example --&amp;gt;&#xA;&#xA;         &amp;lt;div class=&amp;#34;flex flex-wrap gap-2 bg-gray-200 p-4&amp;#34;&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 1&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 2&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 3&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 4&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 5&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 6&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 7&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 8&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 9&amp;lt;/div&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-indigo-500 text-white p-4 w-32&amp;#34;&amp;gt;Item 10&amp;lt;/div&amp;gt;&#xA;         &amp;lt;/div&amp;gt;&#xA;&#xA;         &amp;lt;!-- Centering Example --&amp;gt;&#xA;         &amp;lt;div class=&amp;#34;flex justify-center items-center bg-gray-300 p-4 h-24&amp;#34;&amp;gt;&#xA;            &amp;lt;div class=&amp;#34;bg-yellow-500 text-black p-4&amp;#34;&amp;gt;Centered&amp;lt;/div&amp;gt;&#xA;         &amp;lt;/div&amp;gt;&#xA;      &amp;lt;/div&amp;gt;&#xA;   &amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/pre&gt;&lt;h3&gt;2.1 Code Explanation&lt;/h3&gt;&lt;p&gt;This example demonstrates how to use Tailwind CSS Flexbox utilities to create different layouts: the parent container uses &lt;code&gt;flex flex-col gap-6&lt;/code&gt; to stack sections vertically with spacing, the first section shows horizontal (&lt;code&gt;flex-row&lt;/code&gt;) and vertical (&lt;code&gt;flex-col&lt;/code&gt;) directions, the next demonstrates alignment using &lt;code&gt;justify-between&lt;/code&gt; (space between items) and &lt;code&gt;items-center&lt;/code&gt; (vertical centering), the sizing example uses &lt;code&gt;basis&lt;/code&gt;, &lt;code&gt;grow&lt;/code&gt;, and &lt;code&gt;shrink&lt;/code&gt; to control how items resize within the container, the wrap example uses &lt;code&gt;flex-wrap&lt;/code&gt; to move items onto the next line when space is limited, and finally the centering example combines &lt;code&gt;justify-center&lt;/code&gt; and &lt;code&gt;items-center&lt;/code&gt; to perfectly center content both horizontally and vertically.&lt;h3&gt;2.2 Code Output&lt;/h3&gt;&lt;p&gt;The above code renders a structured layout showcasing multiple Flexbox behaviors in action. You will first notice two sections demonstrating layout direction, where items are displayed horizontally in a row and vertically in a column, helping visualize how &lt;code&gt;flex-row&lt;/code&gt; and &lt;code&gt;flex-col&lt;/code&gt; impact flow. The next section highlights spacing and alignment, where elements are pushed to opposite ends using &lt;code&gt;justify-between&lt;/code&gt; while remaining vertically centered with &lt;code&gt;items-center&lt;/code&gt;. In the sizing example, items dynamically adjust their width based on &lt;code&gt;basis&lt;/code&gt;, &lt;code&gt;grow&lt;/code&gt;, and &lt;code&gt;shrink&lt;/code&gt;, clearly showing how space is distributed among flexible elements. The wrap example demonstrates how Flexbox handles overflow by allowing items to move onto the next line when horizontal space is insufficient. This behavior is controlled using &lt;code&gt;flex-wrap&lt;/code&gt;, ensuring that items do not shrink excessively or break the layout—instead they wrap cleanly into multiple rows, maintaining readability and structure across screen sizes. Finally, the centering example visually confirms how content can be perfectly aligned both horizontally and vertically using a combination of Flexbox utilities.&lt;p&gt;&lt;figure id=attachment_143086 aria-describedby=caption-attachment-143086 style=&#34;width: 856px&#34; class=&#34;wp-caption aligncenter&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3.jpg&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3.jpg fetchpriority=high decoding=async class=&#34;size-full wp-image-143086&#34; data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3.jpg alt=&#34;Fig. 1: Code Output&#34; width=856 height=620 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3.jpg 856w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3-300x217.jpg 300w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3-768x556.jpg 768w&#34; data-sizes=&#34;(max-width: 856px) 100vw, 856px&#34;&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async class=&#34;size-full wp-image-143086&#34; src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3.jpg alt=&#34;Fig. 1: Code Output&#34; width=856 height=620 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3.jpg 856w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3-300x217.jpg 300w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/tailwindflexintailwindcssexampledemooutput3-768x556.jpg 768w&#34; sizes=&#34;(max-width: 856px) 100vw, 856px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption id=caption-attachment-143086 class=wp-caption-text&gt;Fig. 1: Code Output&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;h2&gt;&lt;a name=section-3&gt;&lt;/a&gt;3. Conclusion&lt;/h2&gt;&lt;p&gt;Flexbox is a powerful layout system, and Tailwind CSS makes it significantly easier to use through utility classes. By combining direction control, alignment utilities, and sizing options like &lt;code&gt;basis&lt;/code&gt;, &lt;code&gt;grow&lt;/code&gt;, and &lt;code&gt;shrink&lt;/code&gt;, developers can build highly responsive and flexible layouts with minimal effort.&lt;/p&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-r4rVvWKI5j5bewbW lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=r4rVvWKI5j5bewbW data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-rwvHCTw5uH2f2oRW-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-rwvHCTw5uH2f2oRW-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-rwvHCTw5uH2f2oRW-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;noscript&gt;&lt;img decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-r4rVvWKI5j5bewbW lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=r4rVvWKI5j5bewbW data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-r4rVvWKI5j5bewbW value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/css rel=tag&gt;CSS&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Yatin Batra</author>
      <guid>https://www.javacodegeeks.com/flex-and-justify-items-in-tailwind-css.html</guid>
      <pubDate>Wed, 29 Apr 2026 20:23:45 +0000</pubDate>
    </item>
    <item>
      <title>Real-Time Updates with MQTT and Express.js</title>
      <link>https://www.javacodegeeks.com/real-time-updates-with-mqtt-and-express-js.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/web-development&gt;Web Development&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/web-development/javascript&gt;JavaScript&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/web-development/javascript/node-js&gt;Node.js&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;Real-Time Updates with MQTT and Express.js&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-2096&#34; href=https://www.javacodegeeks.com/category/web-development/javascript/node-js&gt;Node.js&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;Real-Time Updates with MQTT and Express.js&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;div class=&#34;stream-item stream-item-above-post-content&#34;&gt;&lt;div class=stream-item-size&gt;&lt;div id=adngin-in-post-0 style=&#34;float:left; margin-right:20px; margin-bottom:10px; width:300px; height:274px;&#34;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Real-time systems are critical for modern applications such as live dashboards, chat apps, IoT systems, and monitoring platforms. Traditional HTTP-based systems rely on request-response cycles, which are inefficient for continuous updates. This is where MQTT (Message Queuing Telemetry Transport) combined with Express.js provides a lightweight and scalable solution for building real-time update systems. Let us delve into understanding how to build real-time update systems with Mosquitto and Express.js&lt;h2&gt;&lt;a name=section-1&gt;&lt;/a&gt;1. Introduction to MQTT&lt;/h2&gt;&lt;h3&gt;1.1 What is MQTT?&lt;/h3&gt;&lt;p&gt;&lt;a href=https://mqtt.org/ target=_blank&gt;MQTT (Message Queuing Telemetry Transport)&lt;/a&gt; is a lightweight, publish-subscribe messaging protocol designed for constrained devices and unreliable networks. It runs over TCP/IP and is optimized for scenarios where bandwidth, battery, and network reliability are limited. Originally created for oil pipeline monitoring, MQTT has become a standard protocol for IoT systems, real-time dashboards, event-driven architectures, and messaging between distributed services.&lt;h3&gt;1.2 Why Use MQTT?&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Lightweight protocol: Minimal packet overhead compared to HTTP&lt;li&gt;Efficient bandwidth usage: Ideal for mobile, IoT, and edge devices&lt;li&gt;Real-time communication: Low-latency message delivery over persistent TCP connections&lt;li&gt;Decoupled architecture: Producers and consumers do not need to know each other&lt;li&gt;Bi-directional communication: Supports both upstream and downstream data flow&lt;li&gt;Scalable: Handles thousands to millions of clients with proper broker setup&lt;li&gt;Reliable delivery: Supports multiple Quality of Service (QoS) levels&lt;/ul&gt;&lt;h4&gt;1.2.1 MQTT Quality of Service (QoS)&lt;/h4&gt;&lt;p&gt;MQTT provides three levels of delivery guarantees:&lt;ul&gt;&lt;li&gt;QoS 0 (At most once): Message is delivered once with no guarantee&lt;li&gt;QoS 1 (At least once): Message is guaranteed but may be duplicated&lt;li&gt;QoS 2 (Exactly once): Message is delivered exactly once with higher overhead&lt;/ul&gt;&lt;h4&gt;1.2.2 MQTT Retained Messages &amp;amp; Last Will&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Retained Messages: Broker stores the last message on a topic and sends it to new subscribers immediately&lt;li&gt;Last Will and Testament (LWT): Broker publishes a predefined message if a client disconnects unexpectedly&lt;/ul&gt;&lt;h3&gt;1.3 MQTT Architecture&lt;/h3&gt;&lt;p&gt;MQTT follows a Publish-Subscribe Model where communication is mediated by a broker instead of direct client-to-client interaction.&lt;ul&gt;&lt;li&gt;Broker: Central server responsible for receiving, filtering, and distributing messages&lt;li&gt;Publisher: Sends messages to a topic without knowing who will receive them&lt;li&gt;Subscriber: Subscribes to one or more topics to receive messages&lt;li&gt;Topic: Hierarchical string (e.g., &lt;code&gt;flights/delhi/arrivals&lt;/code&gt;) used to organize messages&lt;/ul&gt;&lt;h4&gt;1.3.1 MQTT vs HTTP vs WebSockets&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;HTTP: Request-response model, not suitable for continuous updates&lt;li&gt;WebSockets: Full-duplex but requires more complex connection handling&lt;li&gt;MQTT: Lightweight, event-driven, and optimized for pub-sub communication&lt;/ul&gt;&lt;p&gt;MQTT is particularly effective when systems require decoupled communication and efficient message distribution across multiple consumers. Think of MQTT as an event bus where producers emit events and consumers react to them asynchronously.&lt;h3&gt;1.4 Setting Up an MQTT Broker&lt;/h3&gt;&lt;p&gt;We can use Mosquitto, a popular open-source MQTT broker, for local development and testing.&lt;pre class=&#34;brush:plain; wrap-lines:false;&#34;&gt;# Install Mosquitto (Ubuntu/Debian)&#xA;sudo apt update&#xA;sudo apt install mosquitto mosquitto-clients&#xA;&#xA;# Start the broker&#xA;sudo systemctl start mosquitto&#xA;&#xA;# Enable auto-start on boot&#xA;sudo systemctl enable mosquitto&#xA;&#xA;# Check broker logs&#xA;mosquitto -v&#xA;&#xA;# Open Terminal 1 - Subscribe&#xA;mosquitto_sub -h localhost -t test/topic&#xA;&#xA;# Open Terminal 2 - Publish&#xA;mosquitto_pub -h localhost -t test/topic -m &amp;#34;Hello MQTT&amp;#34;&#xA;&lt;/pre&gt;&lt;p&gt;The above commands demonstrate how to set up and test a local MQTT broker using Mosquitto on a Debian/Ubuntu system. First, the system packages are updated and Mosquitto along with its client utilities are installed. The broker is then started as a background service and enabled to automatically launch on system boot, ensuring availability without manual intervention. The &lt;code&gt;mosquitto -v&lt;/code&gt; command runs the broker in verbose mode, allowing you to monitor logs and debug message flow. To validate the setup, one terminal acts as a subscriber using &lt;code&gt;mosquitto_sub&lt;/code&gt;, listening to messages on a specific topic (&lt;code&gt;test/topic&lt;/code&gt;), while another terminal acts as a publisher using &lt;code&gt;mosquitto_pub&lt;/code&gt;, sending a test message (“Hello MQTT”) to the same topic. This verifies the core publish-subscribe mechanism, where the broker successfully routes messages from publishers to all active subscribers.&lt;div style=&#34;display:inline-block; margin: 15px 0;&#34;&gt;&lt;div id=adngin-JavaCodeGeeks_incontent_video-0 style=display:inline-block;&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;h2&gt;2. Complete Real-Time System with MQTT + Express.js + SSE&lt;/h2&gt;&lt;h3&gt;2.1 Server (Express + MQTT + SSE)&lt;/h3&gt;&lt;p&gt;The following server implementation acts as the core of the system, connecting MQTT with Express and enabling real-time streaming using SSE. It handles message publishing, subscription, and broadcasting to connected clients.&lt;pre class=&#34;brush:js; wrap-lines:false;&#34;&gt;// server.js&#xA;const express = require(&amp;#39;express&amp;#39;);&#xA;const mqtt = require(&amp;#39;mqtt&amp;#39;);&#xA;const bodyParser = require(&amp;#39;body-parser&amp;#39;);&#xA;const cors = require(&amp;#39;cors&amp;#39;);&#xA;&#xA;const app = express();&#xA;app.use(cors());&#xA;app.use(bodyParser.json());&#xA;&#xA;/* ================= MQTT SETUP ================= */&#xA;const client = mqtt.connect(&amp;#39;mqtt://localhost:1883&amp;#39;);&#xA;&#xA;client.on(&amp;#39;connect&amp;#39;, () =&amp;gt; {&#xA;  console.log(&amp;#39;Connected to MQTT Broker&amp;#39;);&#xA;  client.subscribe(&amp;#39;matches/#&amp;#39;); // subscribe all match updates&#xA;});&#xA;&#xA;/* ================= SSE CLIENTS ================= */&#xA;let clients = [];&#xA;&#xA;app.get(&amp;#39;/events&amp;#39;, (req, res) =&amp;gt; {&#xA;  res.setHeader(&amp;#39;Content-Type&amp;#39;, &amp;#39;text/event-stream&amp;#39;);&#xA;  res.setHeader(&amp;#39;Cache-Control&amp;#39;, &amp;#39;no-cache&amp;#39;);&#xA;  res.setHeader(&amp;#39;Connection&amp;#39;, &amp;#39;keep-alive&amp;#39;);&#xA;&#xA;  const clientId = Date.now();&#xA;  const newClient = { id: clientId, res };&#xA;&#xA;  clients.push(newClient);&#xA;&#xA;  req.on(&amp;#39;close&amp;#39;, () =&amp;gt; {&#xA;    clients = clients.filter(c =&amp;gt; c.id !== clientId);&#xA;  });&#xA;});&#xA;&#xA;/* Broadcast to all SSE clients */&#xA;function broadcast(data) {&#xA;  clients.forEach(c =&amp;gt; {&#xA;    c.res.write(`data: ${JSON.stringify(data)}\n\n`);&#xA;  });&#xA;}&#xA;&#xA;/* MQTT → SSE bridge */&#xA;client.on(&amp;#39;message&amp;#39;, (topic, message) =&amp;gt; {&#xA;  const payload = message.toString();&#xA;  console.log(&amp;#39;MQTT:&amp;#39;, topic, payload);&#xA;&#xA;  broadcast({ topic, payload });&#xA;});&#xA;&#xA;/* ================= MATCH ROUTES ================= */&#xA;&#xA;// Create/Update match&#xA;app.post(&amp;#39;/match&amp;#39;, (req, res) =&amp;gt; {&#xA;  const { matchId, score } = req.body;&#xA;&#xA;  const topic = `matches/${matchId}`;&#xA;  client.publish(topic, JSON.stringify(score));&#xA;&#xA;  res.json({ status: &amp;#39;Match updated&amp;#39; });&#xA;});&#xA;&#xA;// Get match (mock)&#xA;app.get(&amp;#39;/match/:id&amp;#39;, (req, res) =&amp;gt; {&#xA;  res.json({ matchId: req.params.id, score: &amp;#34;Live data available via SSE&amp;#34; });&#xA;});&#xA;&#xA;/* ================= STATIC FILES ================= */&#xA;app.use(express.static(&amp;#39;public&amp;#39;));&#xA;&#xA;app.listen(3000, () =&amp;gt; console.log(&amp;#39;Server running on 3000&amp;#39;));&#xA;&lt;/pre&gt;&lt;h4&gt;2.1.1 Code Explanation&lt;/h4&gt;&lt;p&gt;This Node.js server uses Express to create a real-time system by bridging MQTT messaging with browser clients via Server-Sent Events (SSE). It begins by importing required modules such as Express for HTTP handling, MQTT for broker communication, body-parser for parsing JSON requests, and CORS to allow cross-origin access. The MQTT client connects to a local broker and subscribes to all topics under &lt;code&gt;matches/#&lt;/code&gt;, enabling it to receive updates for any match. For real-time streaming, the &lt;code&gt;/events&lt;/code&gt; endpoint establishes an SSE connection by setting appropriate headers and storing each connected client’s response object in an in-memory array; when a client disconnects, it is removed to prevent memory leaks. A &lt;code&gt;broadcast&lt;/code&gt; function iterates over all connected clients and pushes updates using the SSE protocol format. Whenever a message is received from MQTT, the server converts it to a string, logs it, and forwards it to all connected browsers via this broadcast mechanism—effectively acting as a bridge between MQTT and frontend clients. The &lt;code&gt;/match&lt;/code&gt; POST route allows updating or creating a match by publishing the score to a topic like &lt;code&gt;matches/{matchId}&lt;/code&gt;, which in turn triggers real-time updates to all subscribers, while a GET route returns a placeholder response, as real-time data is streamed via SSE. Finally, static files are served from a public directory, and the server listens on port 3000, making it a complete end-to-end system for publishing, consuming, and streaming live match data.&lt;h3&gt;2.2 Admin Upload Interface&lt;/h3&gt;&lt;p&gt;The admin interface allows users to push match updates into the system. It sends data to the backend API, which then publishes it to MQTT for real-time distribution.&lt;pre class=&#34;brush:html; wrap-lines:false;&#34;&gt;&amp;lt;!-- public/admin.html --&amp;gt;&#xA;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;&amp;lt;h2&amp;gt;Admin Panel&amp;lt;/h2&amp;gt;&#xA;&#xA;&amp;lt;input id=&amp;#34;matchId&amp;#34; placeholder=&amp;#34;Match ID&amp;#34;/&amp;gt;&#xA;&amp;lt;input id=&amp;#34;score&amp;#34; placeholder=&amp;#34;Score&amp;#34;/&amp;gt;&#xA;&amp;lt;button onclick=&amp;#34;send()&amp;#34;&amp;gt;Update&amp;lt;/button&amp;gt;&#xA;&#xA;&amp;lt;script&amp;gt;&#xA;async function send() {&#xA;  const matchId = document.getElementById(&amp;#39;matchId&amp;#39;).value;&#xA;  const score = document.getElementById(&amp;#39;score&amp;#39;).value;&#xA;&#xA;  await fetch(&amp;#39;/match&amp;#39;, {&#xA;    method: &amp;#39;POST&amp;#39;,&#xA;    headers: { &amp;#39;Content-Type&amp;#39;: &amp;#39;application/json&amp;#39; },&#xA;    body: JSON.stringify({ matchId, score })&#xA;  });&#xA;&#xA;  alert(&amp;#39;Updated&amp;#39;);&#xA;}&#xA;&amp;lt;/script&amp;gt;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/pre&gt;&lt;h4&gt;2.2.1 Code Explanation&lt;/h4&gt;&lt;p&gt;This HTML file represents a simple admin interface that allows users to send live match updates to the backend server. It consists of two input fields for entering the match ID and the score, along with a button that triggers the &lt;code&gt;send()&lt;/code&gt; JavaScript function when clicked. Inside this function, the values entered by the user are retrieved using &lt;code&gt;document.getElementById&lt;/code&gt;, and an asynchronous HTTP POST request is made to the &lt;code&gt;/match&lt;/code&gt; endpoint using the Fetch API. The request includes a JSON payload containing the match ID and score, with the appropriate &lt;code&gt;Content-Type&lt;/code&gt; header set to &lt;code&gt;application/json&lt;/code&gt;. Once the request is successfully sent, an alert notifies the user that the update has been processed. This action ultimately publishes the data to the MQTT broker via the backend, triggering real-time updates to all connected clients through the SSE stream.&lt;h3&gt;2.3 Live Viewer Interface (SSE)&lt;/h3&gt;&lt;p&gt;The viewer interface listens for real-time updates from the server using Server-Sent Events. It continuously receives and renders match updates without requiring page refreshes.&lt;pre class=&#34;brush:html; wrap-lines:false;&#34;&gt;&amp;lt;!-- public/viewer.html --&amp;gt;&#xA;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;&amp;lt;h2&amp;gt;Live Match Updates&amp;lt;/h2&amp;gt;&#xA;&#xA;&amp;lt;div id=&amp;#34;output&amp;#34;&amp;gt;&amp;lt;/div&amp;gt;&#xA;&#xA;&amp;lt;script&amp;gt;&#xA;const eventSource = new EventSource(&amp;#39;/events&amp;#39;);&#xA;&#xA;eventSource.onmessage = function(event) {&#xA;  const data = JSON.parse(event.data);&#xA;&#xA;  const div = document.getElementById(&amp;#39;output&amp;#39;);&#xA;  div.innerHTML += &amp;#34;&amp;lt;p&amp;gt;&amp;#34; + data.topic + &amp;#34; : &amp;#34; + data.payload + &amp;#34;&amp;lt;/p&amp;gt;&amp;#34;;&#xA;};&#xA;&amp;lt;/script&amp;gt;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/pre&gt;&lt;h4&gt;2.3.1 Code Explanation&lt;/h4&gt;&lt;p&gt;This HTML file acts as a live viewer interface that listens for real-time match updates from the server using Server-Sent Events (SSE). It establishes a persistent connection to the backend by creating a new &lt;code&gt;EventSource&lt;/code&gt; instance pointing to the &lt;code&gt;/events&lt;/code&gt; endpoint, which continuously streams updates without requiring repeated requests. Whenever the server pushes a new message, the &lt;code&gt;onmessage&lt;/code&gt; handler is triggered, where the incoming event data is parsed from JSON format to extract the topic and payload sent via MQTT. The script then dynamically updates the DOM by selecting the &lt;code&gt;output&lt;/code&gt; div and appending a new paragraph element containing the topic (e.g., match identifier) and its corresponding payload (e.g., score). This enables users to see live match updates instantly in the browser as they are published, without needing to refresh the page, effectively demonstrating a seamless real-time data flow from MQTT through the server to the frontend.&lt;h3&gt;2.4 Home Page&lt;/h3&gt;&lt;p&gt;The home page acts as a simple navigation layer, allowing users to access both the admin panel and the live viewer interface from a single entry point.&lt;pre class=&#34;brush:html; wrap-lines:false;&#34;&gt;&amp;lt;!-- public/index.html --&amp;gt;&#xA;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;&amp;lt;h1&amp;gt;Real-Time Match System&amp;lt;/h1&amp;gt;&#xA;&#xA;&amp;lt;ul&amp;gt;&#xA;  &amp;lt;li&amp;gt;&amp;lt;a href=&amp;#34;/admin.html&amp;#34;&amp;gt;Admin Panel&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#xA;  &amp;lt;li&amp;gt;&amp;lt;a href=&amp;#34;/viewer.html&amp;#34;&amp;gt;Live Viewer&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#xA;&amp;lt;/ul&amp;gt;&#xA;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/pre&gt;&lt;h4&gt;2.4.1 Code Explanation&lt;/h4&gt;&lt;p&gt;This HTML file serves as the entry point or homepage of the real-time match system, providing simple navigation to the core functionalities of the application. It displays a title indicating the purpose of the system and includes an unordered list with two links: one directing users to the admin panel (&lt;code&gt;/admin.html&lt;/code&gt;) where match data can be created or updated, and the other leading to the live viewer (&lt;code&gt;/viewer.html&lt;/code&gt;) where real-time updates can be observed. By leveraging Express static file serving on the backend, these links directly load the corresponding HTML files from the public directory. Although minimal in structure, this page acts as a central hub that connects the user to both the data publishing interface and the real-time consumption interface, completing the overall flow of the system.&lt;h3&gt;2.5 Code Output&lt;/h3&gt;&lt;p&gt;When the complete system is run, it demonstrates a full real-time data flow from the admin interface to the viewer interface through MQTT and SSE. After starting the Node.js server and MQTT broker, opening the homepage (&lt;code&gt;index.html&lt;/code&gt;) provides navigation to both the Admin Panel and Live Viewer. In the Admin Panel, entering a match ID and score and clicking “Update” sends a POST request to the backend, which publishes the data to the corresponding MQTT topic. The server, already subscribed to &lt;code&gt;matches/#&lt;/code&gt;, receives this message and immediately broadcasts it to all connected SSE clients. On the Live Viewer page, the browser maintains an open connection to the server via &lt;code&gt;EventSource&lt;/code&gt;, and as soon as the message is broadcast, it is received and rendered dynamically in the UI without any page refresh. This results in an instant update such as &lt;code&gt;matches/123 : {&amp;#34;score&amp;#34;:&amp;#34;120/3&amp;#34;}&lt;/code&gt; appearing on the screen. The system effectively showcases a seamless real-time pipeline where data flows from input to display with minimal latency, validating the integration of MQTT for messaging and SSE for frontend streaming.&lt;h2&gt;&lt;a name=section-3&gt;&lt;/a&gt;3. Conclusion&lt;/h2&gt;&lt;p&gt;Building real-time systems with MQTT and Express.js provides a powerful yet lightweight solution for modern applications. MQTT’s publish-subscribe model decouples systems and ensures efficient message delivery, while Express.js acts as a bridge between traditional HTTP APIs and real-time messaging. This architecture is especially useful in IoT, monitoring dashboards, notifications, and collaborative applications where instant updates are critical. By combining MQTT’s efficiency with Node.js flexibility, you can build scalable, real-time systems with minimal overhead.&lt;/p&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-JNVifqYgc1pUcxUp lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=JNVifqYgc1pUcxUp data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-NcSK2eoePLelC5Pk-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-NcSK2eoePLelC5Pk-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-NcSK2eoePLelC5Pk-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png fetchpriority=high decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-JNVifqYgc1pUcxUp lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=JNVifqYgc1pUcxUp data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-JNVifqYgc1pUcxUp value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/express-js rel=tag&gt;Express.js&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Yatin Batra</author>
      <guid>https://www.javacodegeeks.com/real-time-updates-with-mqtt-and-express-js.html</guid>
      <pubDate>Wed, 29 Apr 2026 20:19:58 +0000</pubDate>
    </item>
    <item>
      <title>Java 25 vs Java 21: The Upgrade Guide NobodyHas Written Yet</title>
      <link>https://www.javacodegeeks.com/2026/04/java-25-vs-java-21-the-upgrade-guide-nobodyhas-written-yet.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java&gt;Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;Java 25 vs Java 21: The Upgrade Guide NobodyHas Written Yet&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-7&#34; href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;Java 25 vs Java 21: The Upgrade Guide NobodyHas Written Yet&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;div class=&#34;stream-item stream-item-above-post-content&#34;&gt;&lt;div class=stream-item-size&gt;&lt;div id=adngin-in-post-0 style=&#34;float:left; margin-right:20px; margin-bottom:10px; width:300px; height:274px;&#34;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;A practical, decision-driven comparison for enterprise teams on Java 21 — covering the three changes that actually matter for production.&lt;/em&gt;&lt;p&gt;Every four years or so, an enterprise Java team faces the same question: &lt;em&gt;is it time to move to the next LTS?&lt;/em&gt; With Java 25 now available and Java 21’s free update window closing in September 2026, that question is becoming urgent for a lot of organisations. Fortunately, this is one of the most straightforward LTS transitions Java has ever asked you to make.&lt;p&gt;Between Java 21 and Java 25, there were four intermediate releases — JDK 22, 23, 24, and finally 25. Most teams skipped all of them entirely. So while individual features have been covered in isolation across many articles, there’s been no single guide that assembles the full picture from the perspective of a team currently running 21 in production. That’s exactly what this article is.&lt;p&gt;Rather than listing every JEP, we’ll focus on the changes that actually have a material effect on a running production system: concurrency behaviour, startup performance, and memory usage. Then we’ll walk through what a practical upgrade path actually looks like.&lt;h2 class=wp-block-heading&gt;1. First: Understanding the Gap Between the Two Releases&lt;/h2&gt;&lt;p&gt;Java 21 was released in September 2023 and quickly became the most widely adopted modern LTS. It delivered virtual threads as a stable feature, completed pattern matching, and brought records and sealed classes to production quality. For most teams, it represented Java finally feeling modern.&lt;p&gt;Java 25 arrived exactly two years later, in September 2025. Importantly, Oracle had already shifted to a &lt;strong&gt;two-year LTS cadence&lt;/strong&gt; (down from three), which is why these two releases are closer together than Java 17 and Java 21 were. That shorter gap means less to absorb — but it also means more teams are still on 21 and asking whether they need to move.&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Release&lt;th class=has-text-align-left data-align=left&gt;Date&lt;th class=has-text-align-left data-align=left&gt;LTS Until&lt;th class=has-text-align-left data-align=left&gt;Key themes&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Java 21&lt;/strong&gt;&lt;td&gt;Sept 2023&lt;td&gt;Sept 2031&lt;td&gt;Virtual threads, pattern matching, records/sealed stable&lt;tr&gt;&lt;td&gt;Java 22&lt;td&gt;Mar 2024&lt;td&gt;—&lt;td&gt;Unnamed variables, FFM API stable, stream gatherers&lt;tr&gt;&lt;td&gt;Java 23&lt;td&gt;Sept 2024&lt;td&gt;—&lt;td&gt;Markdown Javadoc, previews iterating&lt;tr&gt;&lt;td&gt;Java 24&lt;td&gt;Mar 2025&lt;td&gt;—&lt;td&gt;&lt;strong&gt;Virtual thread pinning fix&lt;/strong&gt;, first Leyden AOT, 24 JEPs&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Java 25&lt;/strong&gt;&lt;td&gt;Sept 2025&lt;td&gt;&lt;strong&gt;Sept 2033&lt;/strong&gt;&lt;td&gt;Compact headers, Leyden method profiling, Shenandoah generational&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;The practical implication: if you’re on Java 21 and upgrade directly to Java 25, you’re picking up all the JDK 22, 23, and 24 work in one shot. Crucially, that includes JEP 491 from JDK 24 — the virtual thread pinning fix — which many consider &lt;em&gt;the&lt;/em&gt; most operationally significant improvement since virtual threads were introduced in the first place.&lt;h2 class=wp-block-heading&gt;2. The Fix That Changes Everything: Virtual Thread Pinning&lt;/h2&gt;&lt;p&gt;&lt;em&gt;JEP 491 · JDK 24&lt;/em&gt;&lt;p&gt;When virtual threads landed in Java 21, they came with a well-known asterisk: &lt;strong&gt;blocking inside a &lt;code&gt;synchronized&lt;/code&gt; block or method would “pin” the virtual thread to its carrier platform thread&lt;/strong&gt;. Pinning meant the carrier couldn’t be reused for other virtual threads while it was waiting. In the worst case, all carrier threads could be pinned simultaneously, causing thread starvation or even deadlock.&lt;p&gt;The recommended workaround was to replace &lt;code&gt;synchronized&lt;/code&gt; with &lt;code&gt;ReentrantLock&lt;/code&gt; and similar constructs from &lt;code&gt;java.util.concurrent.locks&lt;/code&gt;. Many popular frameworks — Spring, Hibernate, and others — scrambled to do exactly that ahead of Java 21’s release. However, that meant a lot of existing code still carried the risk.&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;“In JDK 21, when a virtual thread enters a synchronized block and blocks on I/O, the carrier platform thread is occupied the entire time. In JDK 24, the virtual thread unmounts from the carrier, which can then serve other virtual threads.”— Nicolai Parlog, Java Developer Advocate at Oracle, &lt;a href=https://nipafx.dev/inside-java-newscast-80/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;Inside Java Newscast #80&lt;/a&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href=https://openjdk.org/jeps/491 target=_blank rel=&#34;noreferrer noopener&#34;&gt;JEP 491&lt;/a&gt;, delivered in JDK 24, solves this at the JVM level. The monitor mechanism was updated to track virtual thread identity rather than platform thread identity, which means virtual threads can now unmount freely even while holding a monitor. The result is that &lt;code&gt;synchronized&lt;/code&gt; is no longer a performance hazard for virtual thread applications.&lt;h3 class=wp-block-heading&gt;2.1 What Does This Mean in Practice?&lt;/h3&gt;&lt;p&gt;A real benchmark from &lt;a href=https://github.com/danvega/pinning target=_blank rel=&#34;noreferrer noopener&#34;&gt;Dan Vega’s pinning demo&lt;/a&gt; makes the difference viscerally clear. Running 5,000 virtual threads on a single-carrier-thread configuration with synchronized blocking:&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-35-58.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-35-58.png.webp fetchpriority=high decoding=async width=608 height=118 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-35-58.png.webp alt class=wp-image-143005 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-35-58.png.webp 608w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-35-58-300x58.png.webp 300w&#34; data-sizes=&#34;(max-width: 608px) 100vw, 608px&#34;&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async width=608 height=118 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-35-58.png.webp alt class=wp-image-143005 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-35-58.png.webp 608w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-35-58-300x58.png.webp 300w&#34; sizes=&#34;(max-width: 608px) 100vw, 608px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;That’s a 70x speedup from a JVM upgrade alone — no code changes involved. Of course, this is a synthetic benchmark designed to stress pinning specifically. But it illustrates what was at stake for any service that had synchronized I/O paths under high concurrency.&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;&lt;strong&gt;What still pins after JEP 491&lt;/strong&gt;&lt;p&gt;Two scenarios still cause pinning in Java 25: (1) blocking inside&lt;strong&gt;native code&lt;/strong&gt;that calls back into blocking Java, including class loaders; and (2) class initializer execution. These cases are rare in most web services, but if your application makes heavy use of JNI, it’s worth profiling. The old &lt;code&gt;-Djdk.tracePinnedThreads&lt;/code&gt; flag is removed; use JFR’s &lt;code&gt;jdk.VirtualThreadPinned&lt;/code&gt; event instead.&lt;/blockquote&gt;&lt;h3 class=wp-block-heading&gt;2.2 Diagnostics Changed Too&lt;/h3&gt;&lt;p&gt;The &lt;code&gt;-Djdk.tracePinnedThreads=full&lt;/code&gt; system property, which was the primary tool for detecting pinning in Java 21, is gone in JDK 24 and beyond. You now use JDK Flight Recorder to observe the &lt;code&gt;jdk.VirtualThreadPinned&lt;/code&gt; event. The event itself has been enhanced to explain both &lt;em&gt;why&lt;/em&gt; the thread was pinned and which carrier thread was involved — which is actually more useful than the old approach.&lt;p&gt;&lt;em&gt;Check for remaining pinning with JFR&lt;/em&gt;&lt;pre class=brush:java&gt;java -XX:StartFlightRecording=filename=recording.jfr,duration=60s -jar your-app.jar&#xA;jfr print --events jdk.VirtualThreadPinned recording.jfr&#xA;&lt;/pre&gt;&lt;p class=has-text-align-center&gt;&lt;strong&gt;Virtual Thread Throughput: Java 21 vs Java 25&lt;/strong&gt;&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-37-23.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-37-23.png.webp decoding=async width=587 height=395 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-37-23.png.webp alt class=wp-image-143006 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-37-23.png.webp 587w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-37-23-300x202.png.webp 300w&#34; data-sizes=&#34;(max-width: 587px) 100vw, 587px&#34;&gt;&lt;noscript&gt;&lt;img decoding=async width=587 height=395 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-37-23.png.webp alt class=wp-image-143006 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-37-23.png.webp 587w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-37-23-300x202.png.webp 300w&#34; sizes=&#34;(max-width: 587px) 100vw, 587px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption class=wp-element-caption&gt;Relative performance on synchronized-heavy workloads. JEP 491 eliminates the pinning bottleneck. Data based on benchmark results from the OpenJDK community.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;h2 class=wp-block-heading&gt;3. Startup Time: Project Leyden’s First Real Payoff&lt;/h2&gt;&lt;p&gt;&lt;em&gt;JEP 483 (JDK 24) · JEP 514 + JEP 515 (JDK 25)&lt;/em&gt;&lt;p&gt;Java’s startup time has been a long-standing pain point, especially in the microservices and serverless era where applications may restart dozens of times a day. GraalVM’s Native Image addresses this aggressively, but at the cost of full JVM dynamism. &lt;a href=https://openjdk.org/projects/leyden/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;Project Leyden&lt;/a&gt; is the OpenJDK community’s answer: ahead-of-time optimisations that preserve the full JVM while meaningfully cutting startup time.&lt;p&gt;Between JDK 24 and JDK 25, Leyden delivered three JEPs that together form a complete, usable workflow:&lt;div style=&#34;display:inline-block; margin: 15px 0;&#34;&gt;&lt;div id=adngin-JavaCodeGeeks_incontent_video-0 style=display:inline-block;&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;JEP&lt;th class=has-text-align-left data-align=left&gt;JDK&lt;th class=has-text-align-left data-align=left&gt;What It Does&lt;th class=has-text-align-left data-align=left&gt;Impact&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=https://openjdk.org/jeps/483 target=_blank rel=&#34;noreferrer noopener&#34;&gt;&lt;strong&gt;JEP 483&lt;/strong&gt;&lt;/a&gt;&lt;td&gt;24&lt;td&gt;Ahead-of-Time Class Loading &amp;amp; Linking — stores fully loaded/linked classes in an AOT cache&lt;td&gt;~41% faster startup&lt;tr&gt;&lt;td&gt;&lt;a href=https://openjdk.org/jeps/514 target=_blank rel=&#34;noreferrer noopener&#34;&gt;&lt;strong&gt;JEP 514&lt;/strong&gt;&lt;/a&gt;&lt;td&gt;25&lt;td&gt;AOT Command-Line Ergonomics — collapses the training workflow from 3 commands to 2&lt;td&gt;Usability improvement&lt;tr&gt;&lt;td&gt;&lt;a href=https://openjdk.org/jeps/515 target=_blank rel=&#34;noreferrer noopener&#34;&gt;&lt;strong&gt;JEP 515&lt;/strong&gt;&lt;/a&gt;&lt;td&gt;25&lt;td&gt;Ahead-of-Time Method Profiling — stores hot method profiles in the cache, so JIT starts warm&lt;td&gt;15–25% faster warmup&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;Together, the practical effect is striking. In a real-world test by &lt;a href=https://medium.com/@gholamzadreza/go-faster-with-java-25-leveraging-project-leyden-aot-to-cut-startup-time-and-cloud-costs-c4905531d956 target=_blank rel=&#34;noreferrer noopener&#34;&gt;Gholamzadreza’s Spring Boot 3.3+ project&lt;/a&gt;, startup time dropped from 4.9 seconds to 2.4 seconds using the AOT cache — a 51% reduction with three commands and no application code changes. InfoQ’s coverage of JEP 483 cited &lt;strong&gt;Spring PetClinic starting 40–41% faster&lt;/strong&gt; on early builds.&lt;h3 class=wp-block-heading&gt;3.1 How It Works (Without the Jargon)&lt;/h3&gt;&lt;p&gt;Every time your Java application starts, the JVM reads, parses, verifies, loads, and links every class your code touches. For a typical Spring Boot application, that’s &lt;strong&gt;15,000 to 25,000 classes&lt;/strong&gt;. It’s the same work, done again and again, every single cold start.&lt;p&gt;The AOT cache captures all of that work during a training run and stores it in a compact file. On subsequent starts, the JVM picks up those already-linked classes directly. JEP 515 then goes a step further: it also records which methods were hot during the training run, so the JIT compiler knows immediately what to prioritise. The result is that your application reaches peak performance faster — which is the “warmup” improvement.&lt;h3 class=wp-block-heading&gt;3.2 The Workflow on Java 25&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Step 1 — Training run (records + builds the cache)&lt;/em&gt;&lt;pre class=brush:java&gt;java -XX:AOTCacheOutput=app.aot -jar your-application.jar&#xA;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Step 2 — Every production run after that&lt;/em&gt;&lt;pre class=brush:java&gt;java -XX:AOTCache=app.aot -jar your-application.jar&#xA;&lt;/pre&gt;&lt;p&gt;That’s the entire workflow. In JDK 24, it required three separate commands (record, assemble, run). JEP 514 in JDK 25 collapsed training and assembly into one step. And crucially, unlike GraalVM Native Image, you don’t give anything up: full reflection, dynamic class loading, and all JVM features remain available.&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;&lt;strong&gt;Training run best practice&lt;/strong&gt;&lt;p&gt;The AOT cache is only as good as the training run. Make sure your training run exercises the production code paths — ideally by sending representative traffic after startup. Avoid using test frameworks in training, as they load extra classes that inflate the cache. Also remember to regenerate the cache whenever you deploy a new application version; a stale cache won’t cause failures, but it won’t capture new hot paths either.&lt;/blockquote&gt;&lt;p class=has-text-align-center&gt;&lt;strong&gt;Spring Boot Startup Time: Java 21 vs Java 25 with AOT Cache&lt;/strong&gt;&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-08.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-08.png.webp decoding=async width=589 height=428 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-08.png.webp alt class=wp-image-143007 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-08.png.webp 589w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-08-300x218.png.webp 300w&#34; data-sizes=&#34;(max-width: 589px) 100vw, 589px&#34;&gt;&lt;noscript&gt;&lt;img decoding=async width=589 height=428 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-08.png.webp alt class=wp-image-143007 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-08.png.webp 589w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-08-300x218.png.webp 300w&#34; sizes=&#34;(max-width: 589px) 100vw, 589px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption class=wp-element-caption&gt;Measured startup times for a representative Spring Boot 3.x application. “Java 25 + AOT” uses -XX:AOTCacheOutput and -XX:AOTCache flags with a trained cache.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;h2 class=wp-block-heading&gt;4. Memory: Compact Object Headers Give You a Free Heap Reduction&lt;/h2&gt;&lt;p&gt;&lt;em&gt;JEP 519 · JDK 25&lt;/em&gt;&lt;p&gt;We covered JEP 519 in depth in a &lt;a href=https://www.claudeusercontent.com/jep519-compact-object-headers.html target=_blank rel=&#34;noreferrer noopener&#34;&gt;dedicated article&lt;/a&gt;, but it deserves a prominent place in any upgrade guide. The short version: Java 25 ships with the ability to reduce every object’s header size from 12 bytes to 8 bytes. That’s a 33% reduction per object header, and it compounds dramatically at scale.&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-55.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-55.png.webp decoding=async width=615 height=143 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-55.png.webp alt class=wp-image-143008 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-55.png.webp 615w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-55-300x70.png.webp 300w&#34; data-sizes=&#34;(max-width: 615px) 100vw, 615px&#34;&gt;&lt;noscript&gt;&lt;img decoding=async width=615 height=143 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-55.png.webp alt class=wp-image-143008 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-55.png.webp 615w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-39-55-300x70.png.webp 300w&#34; sizes=&#34;(max-width: 615px) 100vw, 615px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Unlike the Leyden AOT features, compact headers require a single JVM flag — no training run needed. The savings are invisible to application code and require no changes whatsoever to your codebase.&lt;p&gt;&lt;em&gt;Enable Compact Object Headers&lt;/em&gt;&lt;div class=wp-block-syntaxhighlighter-code&gt;&lt;pre class=&#34;brush: plain; title: ; notranslate&#34;&gt;java -XX:+UseCompactObjectHeaders -jar your-application.jar&#xA;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;Compact headers require Compressed Class Pointers, which are enabled by default on 64-bit systems with heaps under 32 GB. If your heap exceeds 32 GB, compact headers are not available. Additionally, ZGC is not supported alongside compact headers in JDK 25 — you’d need to use G1 or Parallel GC. A future JDK release is expected to remove this limitation.&lt;/blockquote&gt;&lt;h2 class=wp-block-heading&gt;5. Garbage Collection: Two Notable GC Upgrades&lt;/h2&gt;&lt;p&gt;Beyond compact headers, Java 25 brings two GC improvements that enterprise teams should be aware of — particularly if they already use or are considering low-latency collectors.&lt;h3 class=wp-block-heading&gt;5.1 Generational Shenandoah (JEP 521) — Now Production-Ready&lt;/h3&gt;&lt;p&gt;Shenandoah was always known for its ultra-low pause times, but its single-generation design meant it had to scan the entire heap to find garbage — losing efficiency compared to generational collectors like G1. The generational mode, which separates memory into young and old generations, was experimental in JDK 24. In Java 25, it’s &lt;strong&gt;promoted to a fully supported product feature&lt;/strong&gt;.&lt;p&gt;If you’re currently using non-generational Shenandoah in production, this is a meaningful upgrade in sustainable throughput and memory utilisation. You can enable it without experimental flags:&lt;p&gt;&lt;em&gt;Enable Generational Shenandoah&lt;/em&gt;&lt;pre class=brush:java&gt;java -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -jar your-application.jar&#xA;&lt;/pre&gt;&lt;h3 class=wp-block-heading&gt;5.2 ZGC Simplification: Non-Generational Mode Removed&lt;/h3&gt;&lt;p&gt;If you’re using ZGC, there’s an important change to be aware of: Java 25 removes the non-generational mode of ZGC entirely. That means &lt;code&gt;-XX:+UseZGC&lt;/code&gt; now always means generational ZGC. For most teams this is transparent — generational ZGC has been the default and recommended mode since JDK 21 via JEP 439. However, if you were explicitly running non-generational ZGC for some reason, you’ll need to retest your GC behaviour after the upgrade.&lt;h2 class=wp-block-heading&gt;6. Language &amp;amp; API: What Graduated to Final in Java 25&lt;/h2&gt;&lt;p&gt;Runtime performance aside, Java 25 also finalises several language features that were in preview during Java 21. These are stable enough to use in production code without any flags. Here’s a concise summary of what moved from “preview” to “final”:&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Feature&lt;th class=has-text-align-left data-align=left&gt;JEP&lt;th class=has-text-align-left data-align=left&gt;Status in Java 21&lt;th class=has-text-align-left data-align=left&gt;Status in Java 25&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Scoped Values&lt;/strong&gt;&lt;td&gt;&lt;a href=https://openjdk.org/jeps/506 target=_blank rel=&#34;noreferrer noopener&#34;&gt;JEP 506&lt;/a&gt;&lt;td&gt;Preview&lt;td&gt;Final&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Unnamed Variables (&lt;code&gt;_&lt;/code&gt;)&lt;/strong&gt;&lt;td&gt;JEP 456&lt;td&gt;Preview&lt;td&gt;Final&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Flexible Constructor Bodies&lt;/strong&gt;&lt;td&gt;JEP 513&lt;td&gt;Not available&lt;td&gt;Final&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Module Import Declarations&lt;/strong&gt;&lt;td&gt;&lt;a href=https://openjdk.org/jeps/511 target=_blank rel=&#34;noreferrer noopener&#34;&gt;JEP 511&lt;/a&gt;&lt;td&gt;Not available&lt;td&gt;Final&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Instance Main Methods&lt;/strong&gt;&lt;td&gt;JEP 512&lt;td&gt;Not available&lt;td&gt;Final&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Structured Concurrency&lt;/strong&gt;&lt;td&gt;&lt;a href=https://openjdk.org/jeps/505 target=_blank rel=&#34;noreferrer noopener&#34;&gt;JEP 505&lt;/a&gt;&lt;td&gt;Preview&lt;td&gt;Preview (5th)&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Key Derivation Function API&lt;/strong&gt;&lt;td&gt;JEP 518&lt;td&gt;Not available&lt;td&gt;Final&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;The most immediately useful of these for most teams is &lt;strong&gt;Scoped Values&lt;/strong&gt; (JEP 506). They’re a cleaner, more efficient replacement for &lt;code&gt;ThreadLocal&lt;/code&gt; — particularly in virtual-thread-heavy applications where ThreadLocal has known memory and performance issues. With Scoped Values now final, you can confidently migrate away from &lt;code&gt;ThreadLocal&lt;/code&gt; for contextual data sharing in high-concurrency paths.&lt;h2 class=wp-block-heading&gt;7. Breaking Changes and Removal Risks&lt;/h2&gt;&lt;p&gt;Fortunately, the Java 21-to-25 migration has very few genuine breaking changes. Java’s commitment to backward compatibility means that the overwhelming majority of Java 21 applications will compile and run on Java 25 without modification. Nevertheless, there are a handful of things worth checking:&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Change&lt;th class=has-text-align-left data-align=left&gt;Risk Level&lt;th class=has-text-align-left data-align=left&gt;What to Do&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;32-bit x86 port removed&lt;/strong&gt;&lt;td&gt;Low&lt;td&gt;Check build agents and deployment images for any 32-bit JDK assumptions&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Non-generational ZGC removed&lt;/strong&gt;&lt;td&gt;Medium&lt;td&gt;If explicitly using non-generational ZGC, retest GC behaviour post-upgrade&lt;tr&gt;&lt;td&gt;&lt;strong&gt;&lt;code&gt;-Djdk.tracePinnedThreads&lt;/code&gt; removed&lt;/strong&gt;&lt;td&gt;Low&lt;td&gt;Switch monitoring to &lt;code&gt;jfr print --events jdk.VirtualThreadPinned&lt;/code&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Security Manager fully removed&lt;/strong&gt;&lt;td&gt;Medium&lt;td&gt;If still using &lt;code&gt;java.security.manager&lt;/code&gt;, this path must be migrated before 25&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Preview API signature changes&lt;/strong&gt;&lt;td&gt;Medium&lt;td&gt;StructuredTaskScope constructors changed to factory methods across previews; update call sites&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Native code / fixed header layout&lt;/strong&gt;&lt;td&gt;Opt-in&lt;td&gt;Compact headers only apply if you enable &lt;code&gt;-XX:+UseCompactObjectHeaders&lt;/code&gt;; no risk unless opted in&lt;/table&gt;&lt;/figure&gt;&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;&lt;strong&gt;Security Manager: Act Now If You Haven’t&lt;/strong&gt;&lt;p&gt;The Java Security Manager was deprecated in Java 17, deprecated-for-removal in Java 18, and its enforcement was disabled in Java 24. By Java 25, the supporting infrastructure is being stripped out. If your codebase or any of its dependencies still references &lt;code&gt;System.setSecurityManager()&lt;/code&gt; or similar APIs, this needs to be addressed before upgrading. Run &lt;code&gt;javac -Xlint:deprecation&lt;/code&gt; on your full build to surface any remaining references.&lt;/blockquote&gt;&lt;h2 class=wp-block-heading&gt;8. Support Timelines: Why “Later” Has a Deadline&lt;/h2&gt;&lt;p&gt;One of the most concrete reasons to plan your upgrade now rather than later is the support window. Java 21 free updates from Oracle expire in &lt;strong&gt;September 2026&lt;/strong&gt;. That’s roughly 18 months from today. Java 25 extends that window to &lt;strong&gt;September 2033&lt;/strong&gt; — giving you an extra two years of support runway.&lt;p class=has-text-align-center&gt;&lt;strong&gt;LTS Support Windows: Java 21 vs Java 25&lt;/strong&gt;&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-41-47.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-41-47.png.webp decoding=async width=585 height=318 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-41-47.png.webp alt class=wp-image-143009 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-41-47.png.webp 585w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-41-47-300x163.png.webp 300w&#34; data-sizes=&#34;(max-width: 585px) 100vw, 585px&#34;&gt;&lt;noscript&gt;&lt;img decoding=async width=585 height=318 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-41-47.png.webp alt class=wp-image-143009 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-41-47.png.webp 585w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-41-47-300x163.png.webp 300w&#34; sizes=&#34;(max-width: 585px) 100vw, 585px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption class=wp-element-caption&gt;Oracle Premier Support timelines. “Free updates” under the No-Fee Terms end one year after the next LTS release. Java 21 free updates end September 2026.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Furthermore, tooling support for Java 25 is already strong. Spring Boot 3.5+ supports it, Gradle 9.1+ supports it, and Maven’s compiler plugin 3.14.1+ supports it. The ecosystem matured quickly precisely because Java 25 is an LTS release — the kind that frameworks actively target.&lt;h2 class=wp-block-heading&gt;9. Should You Upgrade? A Decision Matrix&lt;/h2&gt;&lt;p&gt;Rather than a one-size-fits-all recommendation, here’s a straightforward way to think about timing based on your organisation’s profile:&lt;p class=has-text-align-center&gt;&lt;strong&gt;Upgrade Decision Matrix: Java 21 → Java 25&lt;/strong&gt;&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Team / Workload Profile&lt;th class=has-text-align-left data-align=left&gt;Verdict&lt;th class=has-text-align-left data-align=left&gt;Recommended Action &amp;amp; Reason&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Heavy virtual thread usageLoom-based services, high-concurrency APIs&lt;td class=has-text-align-center data-align=center&gt;&lt;strong&gt;Upgrade now&lt;/strong&gt;&lt;td&gt;&lt;strong&gt;Upgrade promptly.&lt;/strong&gt;JEP 491 removes a latent scalability risk. The pinning issue may not be visible under normal load but can cause thread starvation or deadlocks under traffic spikes.&lt;tr&gt;&lt;td&gt;Containerised microservicesFrequent cold starts, Kubernetes, serverless&lt;td class=has-text-align-center data-align=center&gt;&lt;strong&gt;Upgrade now&lt;/strong&gt;&lt;td&gt;&lt;strong&gt;Upgrade and enable Leyden AOT.&lt;/strong&gt;The AOT cache (JEPs 483 + 515) can cut startup time by up to 51% with two commands. Directly lowers cloud compute costs and improves deployment velocity.&lt;tr&gt;&lt;td&gt;Heap-heavy workloadsSpring Boot, ORM-heavy apps, in-memory caches&lt;td class=has-text-align-center data-align=center&gt;&lt;strong&gt;Upgrade now&lt;/strong&gt;&lt;td&gt;&lt;strong&gt;Upgrade and benchmark compact headers.&lt;/strong&gt;A single JVM flag (&lt;code&gt;-XX:+UseCompactObjectHeaders&lt;/code&gt;) saves 10–22% heap with zero code changes. Almost always worth taking.&lt;tr&gt;&lt;td&gt;Stable batch / data processingLong-running jobs, pipelines, ETL workloads&lt;td class=has-text-align-center data-align=center&gt;&lt;strong&gt;Plan for 2026&lt;/strong&gt;&lt;td&gt;&lt;strong&gt;Plan upgrade before Java 21 free-update expiry (Sept 2026).&lt;/strong&gt;Lower urgency day-to-day, but compact headers and fewer GC cycles still provide meaningful efficiency gains. Don’t wait until the last minute.&lt;tr&gt;&lt;td&gt;Legacy enterprise monolithSlow release cycle, large codebase, many dependencies&lt;td class=has-text-align-center data-align=center&gt;&lt;strong&gt;Start now&lt;/strong&gt;&lt;td&gt;&lt;strong&gt;Begin the upgrade process immediately.&lt;/strong&gt;The migration itself is low-risk, but lead time matters. Allow 6–12 months for thorough testing across dependency chains before cutting over to production.&lt;tr&gt;&lt;td&gt;Greenfield new service or rewriteNew project, clean slate&lt;td class=has-text-align-center data-align=center&gt;&lt;strong&gt;Start on 25&lt;/strong&gt;&lt;td&gt;&lt;strong&gt;Start on Java 25 directly.&lt;/strong&gt;No reason to begin on an older LTS. Java 25 has a longer support window (until 2033), better performance defaults, and a complete, stable feature set.&lt;/table&gt;&lt;/figure&gt;&lt;h2 class=wp-block-heading&gt;10. Your Practical Upgrade Checklist&lt;/h2&gt;&lt;p&gt;Finally, here’s a step-by-step path that should work for most teams moving from Java 21 to Java 25 on a production system:&lt;ul class=wp-block-list&gt;&lt;li&gt;&lt;strong&gt;Update your build toolchain first.&lt;/strong&gt; Upgrade to Gradle 9.1+ or Maven compiler plugin 3.14.1+. Update your Docker base images to a Java 25 distribution (Eclipse Temurin, Azul Zulu, Amazon Corretto all have builds).&lt;li&gt;&lt;strong&gt;Compile and run tests on JDK 25 with no flags.&lt;/strong&gt; The vast majority of Java 21 codebases compile clean. Use &lt;code&gt;javac -Xlint:deprecation&lt;/code&gt; to surface any deprecated API usage. Fix any Security Manager references.&lt;li&gt;&lt;strong&gt;Remove any &lt;code&gt;synchronized → ReentrantLock&lt;/code&gt; workarounds you added for Java 21.&lt;/strong&gt; With JEP 491 in place, you can now choose between synchronized and j.u.c.locks based on what best fits the problem — not based on pinning avoidance.&lt;li&gt;&lt;strong&gt;Enable compact object headers on a canary tier first.&lt;/strong&gt; Add &lt;code&gt;-XX:+UseCompactObjectHeaders&lt;/code&gt;, run representative load, and compare heap metrics, GC frequency, and latency against your Java 21 baseline. If you use ZGC, plan to test on G1 or Parallel GC instead.&lt;li&gt;&lt;strong&gt;Run a Leyden AOT training session.&lt;/strong&gt; Execute the two-command workflow (&lt;code&gt;-XX:AOTCacheOutput&lt;/code&gt; then &lt;code&gt;-XX:AOTCache&lt;/code&gt;), measure startup time and time-to-first-request against your baseline, and add cache file generation to your CI/CD pipeline as a build artifact.&lt;li&gt;&lt;strong&gt;Check for residual pinning with JFR.&lt;/strong&gt; Even after JEP 491, native-code paths can still pin. Run &lt;code&gt;jfr print --events jdk.VirtualThreadPinned recording.jfr&lt;/code&gt; on a production load test to confirm your services are pin-free.&lt;li&gt;&lt;strong&gt;Roll out gradually.&lt;/strong&gt; Deploy Java 25 with compact headers and the AOT cache to one service tier at a time. Monitor RSS, GC pause times, throughput, and error rates. Keep the old JVM flags documented so you can disable features selectively if needed.&lt;li&gt;&lt;strong&gt;Update CI/CD images and documentation.&lt;/strong&gt; Update any CI container images, Kubernetes base images, and runbooks to reflect the new JVM flags. Document which flags are enabled in each environment.&lt;/ul&gt;&lt;h2 class=wp-block-heading&gt;11. What We’ve Learned&lt;/h2&gt;&lt;p&gt;In this guide, we walked through the most important differences between Java 21 and Java 25 from the perspective of a team running in production. We started with the &lt;strong&gt;virtual thread pinning fix (JEP 491)&lt;/strong&gt;, delivered in JDK 24, which eliminates the biggest scalability limitation that shipped with virtual threads in Java 21 — allowing &lt;code&gt;synchronized&lt;/code&gt; blocks to be used freely without the risk of carrier thread exhaustion. We then explored &lt;strong&gt;Project Leyden’s AOT cache&lt;/strong&gt; (JEP 483 + 514 + 515), which can cut Spring Boot startup times by up to 51% and improve warmup performance by 15–25%, all with two commands and zero code changes.&lt;p&gt;Next, we covered &lt;strong&gt;Compact Object Headers (JEP 519)&lt;/strong&gt;, which shave 4 bytes off every object and translate into 10–22% less heap usage on object-heavy workloads, enabled by a single JVM flag. We also touched on GC improvements — Generational Shenandoah reaching production status and ZGC simplification — and reviewed which language features moved from preview to final, including Scoped Values and Module Import Declarations.&lt;p&gt;Finally, we covered the handful of genuine breaking changes (Security Manager removal, non-generational ZGC removal, diagnostic flag changes) and provided a practical eight-step upgrade checklist. The overall message: the Java 21→25 migration is low-risk and high-reward, and with Java 21 free updates expiring in September 2026, now is exactly the right time to start.&lt;/p&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-vznykN6aqn3oJE1o lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=vznykN6aqn3oJE1o data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-aNgtfohEsf65iF7U-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-aNgtfohEsf65iF7U-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-aNgtfohEsf65iF7U-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png.webp decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png.webp alt width=320 height=363&gt;&lt;noscript&gt;&lt;img decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png.webp alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-vznykN6aqn3oJE1o lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=vznykN6aqn3oJE1o data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-vznykN6aqn3oJE1o value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/java21 rel=tag&gt;Java21&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/java25 rel=tag&gt;Java25&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/jvm-upgrade rel=tag&gt;JVM Upgrade&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Eleftheria Drosopoulou</author>
      <guid>https://www.javacodegeeks.com/2026/04/java-25-vs-java-21-the-upgrade-guide-nobodyhas-written-yet.html</guid>
      <pubDate>Wed, 29 Apr 2026 15:35:00 +0000</pubDate>
    </item>
    <item>
      <title>[FREE EBOOKS] Pragmatic Software Testing, Employee Experience Design &amp; Four More Best Selling Titles</title>
      <link>https://www.javacodegeeks.com/2026/04/free-ebooks-pragmatic-software-testing-employee-experience-design-four-more-best-selling-titles-2.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/meta-jcg&gt;Meta JCG&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;[FREE EBOOKS] Pragmatic Software Testing, Employee Experience Design &amp;amp; Four More Best Selling Titles&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-16&#34; href=https://www.javacodegeeks.com/category/meta-jcg&gt;Meta JCG&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;[FREE EBOOKS] Pragmatic Software Testing, Employee Experience Design &amp;amp; Four More Best Selling Titles&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;p&gt;Hello fellow geeks,&lt;p&gt;Fresh offers await you on our &lt;a href=https://javacodegeeks.tradepub.com/ target=_blank&gt;Information Technology Research Library&lt;/a&gt;, please have a look!&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=25% style=&#34;border: 0px;vertical-align: top&#34;&gt;&lt;a href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile868&amp;amp;ch=w_wile868-j&#34; target=_blank&gt;&lt;img data-lazyloaded=1 src=https://img.tradepub.com/free/w_wile868/images/w_wile868c4.gif decoding=async data-src=https://img.tradepub.com/free/w_wile868/images/w_wile868c4.gif&gt;&lt;noscript&gt;&lt;img decoding=async src=https://img.tradepub.com/free/w_wile868/images/w_wile868c4.gif&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;td style=&#34;vertical-align: top;border: 0px&#34;&gt;&lt;h2 style=&#34;text-align: center;background: #c8dbf7&#34;&gt;Pragmatic Software Testing: Becoming an Effective and Efficient Test Professional ($55.00 Value) FREE for a Limited Time&lt;/h2&gt;&lt;p&gt;A hands-on guide to testing techniques that deliver reliable software and systems. Testing even a simple system can quickly turn into a potentially infinite task. Faced with tight costs and schedules, testers need to have a toolkit of practical techniques combined with hands-on experience and the right strategies in order to complete a successful project. World-renowned testing expert Rex Black provides you with the proven methods and concepts that test professionals must know. He presents you with the fundamental techniques for testing and clearly shows you how to select and apply successful strategies to test a system with budget and time constraints. Black begins by discussing the goals and tactics of effective and efficient testing. Next, he lays the foundation of his technique for risk-based testing, explaining how to analyze, prioritize, and document risks to the quality of the system using both informal and formal techniques. He then clearly describes how to design, develop, and, ultimately, document various kinds of tests. Because this is a hands-on activity, Black includes realistic, life-sized exercises that illustrate all of the major test techniques with detailed solutions.&lt;p style=&#34;text-align: center;height: 65px;margin-top: 40px&#34;&gt;&lt;a class=download style=&#34;background-color: #c8dbf7;border-color: #b0c4de;padding-top: 19px;text-decoration: none&#34; href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile868&amp;amp;ch=w_wile868-j&#34; target=_blank&gt;&lt;span style=&#34;font-size: 20px;font-weight: bold;vertical-align: middle&#34;&gt;Get it FREE!&lt;/span&gt;&lt;/a&gt;&lt;tr&gt;&lt;td width=25% style=&#34;border: 0px;vertical-align: top&#34;&gt;&lt;a href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile867&amp;amp;ch=w_wile867-j&#34; target=_blank&gt;&lt;img data-lazyloaded=1 src=https://img.tradepub.com/free/w_wile867/images/w_wile867c4.gif decoding=async data-src=https://img.tradepub.com/free/w_wile867/images/w_wile867c4.gif&gt;&lt;noscript&gt;&lt;img decoding=async src=https://img.tradepub.com/free/w_wile867/images/w_wile867c4.gif&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;td style=&#34;vertical-align: top;border: 0px&#34;&gt;&lt;h2 style=&#34;text-align: center;background: #c8dbf7&#34;&gt;Employee Experience Design: How to Co-create Work Where People and Organizations Thrive ($28.00 Value) FREE for a Limited Time&lt;/h2&gt;&lt;p&gt;How to harness Employee Experience Design to attract and retain the best talent. In Employee Experience Design: How to Co-create Work Where People and Organizations Thrive,three highly experienced leaders explain how businesses can use Employee Experience Design to create workplaces that deliver better business results by first focusing on meaningful employee experiences. Many leading organizations worldwide have successfully implemented Employee Experience Design, but until now, there has been no comprehensive book that outlines exactly how to do it.Employee Experience Design delivers a proven, step-by-step method that leads to more engaged and productive employees, which in turn leads to superior organizational performance. With inspiring stories from leading brands like Airbnb, Patagonia, and many others, this book addresses challenges businesses face, such as: We all know that the world of work is continuously evolving and unpredictable. Many leaders are not sure how to make changes to address new, unexpected challenges. Employee Experience Design is a system leaders can use to meet those challenges. Employee Experience Design is much more than a rebrand of traditional HR practices. It’s a shift in mindset that HR and the organization can use to navigate highly competitive markets and ones with thin profit margins. Many organizations are drowning in policies and initiatives. Employee Experience Design is a way to reduce that burden while delivering better results both for employees and for the bottom line. Employee Experience Design is a timely and practical guide for business leaders, executives, and managers who want to recruit the best talent, engage and retain those people, and deliver impressive business results. Offer Expires 5/5/2026.&lt;p style=&#34;text-align: center;height: 65px;margin-top: 40px&#34;&gt;&lt;a class=download style=&#34;background-color: #c8dbf7;border-color: #b0c4de;padding-top: 19px;text-decoration: none&#34; href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile867&amp;amp;ch=w_wile867-j&#34; target=_blank&gt;&lt;span style=&#34;font-size: 20px;font-weight: bold;vertical-align: middle&#34;&gt;Get it FREE!&lt;/span&gt;&lt;/a&gt;&lt;tr&gt;&lt;td width=25% style=&#34;border: 0px;vertical-align: top&#34;&gt;&lt;a href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile866&amp;amp;ch=w_wile866-j&#34; target=_blank&gt;&lt;img data-lazyloaded=1 src=https://img.tradepub.com/free/w_wile866/images/w_wile866c4.gif decoding=async data-src=https://img.tradepub.com/free/w_wile866/images/w_wile866c4.gif&gt;&lt;noscript&gt;&lt;img decoding=async src=https://img.tradepub.com/free/w_wile866/images/w_wile866c4.gif&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;td style=&#34;vertical-align: top;border: 0px&#34;&gt;&lt;h2 style=&#34;text-align: center;background: #c8dbf7&#34;&gt;Beyond Advertising: Creating Value Through All Customer Touchpoints ($30.00 Value) FREE for a Limited Time&lt;/h2&gt;&lt;p&gt;The fundamental relationships among brands, media, and people are being transformed, and just as we try to adapt, along comes a new disruption. Are you and your organization prepared to deal with today’s unprecedented speed and scope of technological change?. Beyond Advertising provides a business transformation road map for an aspirational future, based on the insights of more than 200 of the world’s most forward-thinking executives, innovators, and academics all grappling with today’s unique challenges and opportunities. This book offers a concrete set of principles, including The All Touchpoint Value Creation Model, designed to lift us out of reactive thinking and encourage the co-creation of a future better for business, better for people, and better for society. Actionable steps include: Holistically orchestrate and allocate resources across all touchpoints. Redefine expectations of success to align for multi-win outcomes. Provide every stakeholder at all touchpointsa R.A.V.E.S. standard of content: relevant and respectful, actionable, valuable, exceptional experiences, and a shareworthy story. Develop all touchpoints to maximize the M.A.D.E.s value of context: the complete person, the features of the delivery platform, the dynamic environment, and synergies with other touchpoints. Offer Expires 5/5/2026.&lt;p style=&#34;text-align: center;height: 65px;margin-top: 40px&#34;&gt;&lt;a class=download style=&#34;background-color: #c8dbf7;border-color: #b0c4de;padding-top: 19px;text-decoration: none&#34; href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile866&amp;amp;ch=w_wile866-j&#34; target=_blank&gt;&lt;span style=&#34;font-size: 20px;font-weight: bold;vertical-align: middle&#34;&gt;Get it FREE!&lt;/span&gt;&lt;/a&gt;&lt;tr&gt;&lt;td width=25% style=&#34;border: 0px;vertical-align: top&#34;&gt;&lt;a href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile865&amp;amp;ch=w_wile865-j&#34; target=_blank&gt;&lt;img data-lazyloaded=1 src=https://img.tradepub.com/free/w_wile865/images/w_wile865c4.gif decoding=async data-src=https://img.tradepub.com/free/w_wile865/images/w_wile865c4.gif&gt;&lt;noscript&gt;&lt;img decoding=async src=https://img.tradepub.com/free/w_wile865/images/w_wile865c4.gif&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;td style=&#34;vertical-align: top;border: 0px&#34;&gt;&lt;h2 style=&#34;text-align: center;background: #c8dbf7&#34;&gt;Ransomware Protection Playbook ($28.00 Value) FREE for a Limited Time&lt;/h2&gt;&lt;p&gt;Avoid becoming the next ransomware victim by taking practical steps today. Colonial Pipeline. CWT Global. Brenntag. Travelex. The list of ransomware victims is long, distinguished, and sophisticated. And it’s growing longer every day. In Ransomware Protection Playbook, computer security veteran and expert penetration tester Roger A. Grimes delivers an actionable blueprint for organizations seeking a robust defense against one of the most insidious and destructive IT threats currently in the wild. You’ll learn about concrete steps you can take now to protect yourself or your organization from ransomware attacks. In addition to walking you through the necessary technical preventative measures, this critical book will show you how to: Quickly detect an attack, limit the damage, and decide whether to pay the ransom. Implement a pre-set game plan in the event of a game-changing security breach to help limit the reputational and financial damage. Lay down a secure foundation of cybersecurity insurance and legal protection to mitigate the disruption to your life and business. A must-read for cyber and information security professionals, privacy leaders, risk managers, and CTOs, Ransomware Protection Playbook is an irreplaceable and timely resource for anyone concerned about the security of their, or their organization’s, data.&lt;p style=&#34;text-align: center;height: 65px;margin-top: 40px&#34;&gt;&lt;a class=download style=&#34;background-color: #c8dbf7;border-color: #b0c4de;padding-top: 19px;text-decoration: none&#34; href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile865&amp;amp;ch=w_wile865-j&#34; target=_blank&gt;&lt;span style=&#34;font-size: 20px;font-weight: bold;vertical-align: middle&#34;&gt;Get it FREE!&lt;/span&gt;&lt;/a&gt;&lt;tr&gt;&lt;td width=25% style=&#34;border: 0px;vertical-align: top&#34;&gt;&lt;a href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile863&amp;amp;ch=w_wile863-j&#34; target=_blank&gt;&lt;img data-lazyloaded=1 src=https://img.tradepub.com/free/w_wile863/images/w_wile863c4.gif decoding=async data-src=https://img.tradepub.com/free/w_wile863/images/w_wile863c4.gif&gt;&lt;noscript&gt;&lt;img decoding=async src=https://img.tradepub.com/free/w_wile863/images/w_wile863c4.gif&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;td style=&#34;vertical-align: top;border: 0px&#34;&gt;&lt;h2 style=&#34;text-align: center;background: #c8dbf7&#34;&gt;Job Architecture: Building a Language for Workforce Intelligence ($35.00 Value) FREE for a Limited Time&lt;/h2&gt;&lt;p&gt;Harness the power of taxonomies for better human capital management and employee wellbeing. In Job Architecture, economist and entrepreneur Ben Zweig offers a revolutionary approach to transforming human capital management through the power of taxonomies. The book follows the experience and ideas of key individuals-from the founders of Wall Street, to the original management consultant, to a young data scientist just out of grad school looking to make sense of the modern workforce-in order to illustrate why our current human capital infrastructure is not serving employees well and what we can do to change that. By categorizing and organizing workforce data, Zweig provides a practical roadmap for creating a more efficient and data-driven labor market. This book includes key insights on how to: Use AI and similar large language model technologies to support businesses with appropriate categorization and regimentation of data. Know whether or not a taxonomy can be useful and functional for an organization in their ability to be flexible, auditable, and adaptable. Build a taxonomy that meets the needs of a workforce or organization through clustering, labeling, and production. Combining storytelling with real-world examples, theoretical analysis, and a practical framework, Job Architecture is an essential guide for companies to manage a competitive, modern workforce that improves the working experience for all employees. Offer Expires 4/28/2026.&lt;p style=&#34;text-align: center;height: 65px;margin-top: 40px&#34;&gt;&lt;a class=download style=&#34;background-color: #c8dbf7;border-color: #b0c4de;padding-top: 19px;text-decoration: none&#34; href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile863&amp;amp;ch=w_wile863-j&#34; target=_blank&gt;&lt;span style=&#34;font-size: 20px;font-weight: bold;vertical-align: middle&#34;&gt;Get it FREE!&lt;/span&gt;&lt;/a&gt;&lt;tr&gt;&lt;td width=25% style=&#34;border: 0px;vertical-align: top&#34;&gt;&lt;a href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile864&amp;amp;ch=w_wile864-j&#34; target=_blank&gt;&lt;img data-lazyloaded=1 src=https://img.tradepub.com/free/w_wile864/images/w_wile864c4.gif decoding=async data-src=https://img.tradepub.com/free/w_wile864/images/w_wile864c4.gif&gt;&lt;noscript&gt;&lt;img decoding=async src=https://img.tradepub.com/free/w_wile864/images/w_wile864c4.gif&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;td style=&#34;vertical-align: top;border: 0px&#34;&gt;&lt;h2 style=&#34;text-align: center;background: #c8dbf7&#34;&gt;Coexisting with AI: Work, Love, and Play in a Changing World ($28.00 Value) FREE for a Limited Time&lt;/h2&gt;&lt;p&gt;Your comprehensive, easy-to-understand guide on AI’s impact in business and life. Coexisting with AI: Work, Love, and Play in a Changing Worldis an exploration of how AI can be used at each stage of our lives. It helps readers understand the positive impact of AI and where governance is needed from both an individual and business perspective. From childhood through to aging, this book delivers a holistic understanding of this exciting new technology in language that anyone can understand regardless of technical expertise. Written by Kay Firth-Butterfield, former inaugural Head of AI at the World Economic Forum and one of the most foremost experts in the world on the governance of AI, topics explored in this book include: An explanation of AI and Chatbots and their dependence on data. How to use AI wisely in business, with your children and in your life. How AI might be used in politics and war. The good, bad, and ugly of AI now and into the future. AI’s potential to solve some of humanity’s biggest problems, from human trafficking to disease. Essential governance considerations to make AI a beneficial technological development for all. Coexisting With AIearns a well-deserved spot on the bookshelves of all individuals, from tech executives to curious citizens, seeking expert insight on where AI can take us and how to plot the best path forward for your family and business. Offer Expires 4/28/2026.&lt;p style=&#34;text-align: center;height: 65px;margin-top: 40px&#34;&gt;&lt;a class=download style=&#34;background-color: #c8dbf7;border-color: #b0c4de;padding-top: 19px;text-decoration: none&#34; href=&#34;https://javacodegeeks.tradepub.com/c/pubRD.mpl?secure=1&amp;amp;sr=oc&amp;amp;_t=oc:&amp;amp;qf=w_wile864&amp;amp;ch=w_wile864-j&#34; target=_blank&gt;&lt;span style=&#34;font-size: 20px;font-weight: bold;vertical-align: middle&#34;&gt;Get it FREE!&lt;/span&gt;&lt;/a&gt;&lt;/table&gt;&lt;p&gt;That’s it for now, we hope you found them insightful. Stay tuned for more!&lt;p&gt;Till next time, keep geeking!&lt;/p&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-uqSVHlTAosLUti4w lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=uqSVHlTAosLUti4w data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-HCFa5tQAJymmIuzo-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-HCFa5tQAJymmIuzo-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-HCFa5tQAJymmIuzo-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png fetchpriority=high decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-uqSVHlTAosLUti4w lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=uqSVHlTAosLUti4w data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-uqSVHlTAosLUti4w value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/ebooks rel=tag&gt;eBooks&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/offers rel=tag&gt;Offers&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Java Code Geeks</author>
      <guid>https://www.javacodegeeks.com/2026/04/free-ebooks-pragmatic-software-testing-employee-experience-design-four-more-best-selling-titles-2.html</guid>
      <pubDate>Wed, 29 Apr 2026 10:30:30 +0000</pubDate>
    </item>
    <item>
      <title>Compact Object Headers: The Invisible JDK 25 FeatureWith the Biggest Memory Impact</title>
      <link>https://www.javacodegeeks.com/2026/04/compact-object-headers-the-invisible-jdk-25-featurewith-the-biggest-memory-impact.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java&gt;Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;Compact Object Headers: The Invisible JDK 25 FeatureWith the Biggest Memory Impact&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-7&#34; href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;Compact Object Headers: The Invisible JDK 25 FeatureWith the Biggest Memory Impact&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;div class=&#34;stream-item stream-item-above-post-content&#34;&gt;&lt;div class=stream-item-size&gt;&lt;div id=adngin-in-post-0 style=&#34;float:left; margin-right:20px; margin-bottom:10px; width:300px; height:274px;&#34;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;How four saved bytes per object can quietly transform your entire heap — and why you don’t have to change a single line of code.&lt;/em&gt;&lt;p&gt;Every so often, the Java platform ships a change that sits quietly in the release notes — no flashy syntax, no new API, no migration guide — and yet it carries one of the most meaningful real-world payoffs in years. &lt;strong&gt;JEP 519, Compact Object Headers&lt;/strong&gt;, is precisely that kind of feature.&lt;p&gt;Promoted to a full product feature in &lt;strong&gt;JDK 25&lt;/strong&gt; (September 2025), this enhancement shrinks the memory overhead that the JVM attaches to &lt;em&gt;every single Java object&lt;/em&gt; from 12 bytes down to just 8 bytes. That’s a 33% reduction in header size. And in applications that create millions of objects — which, as it turns out, describes almost every modern Java workload — those four bytes add up surprisingly fast.&lt;p&gt;In this article, we’ll walk through what object headers actually are, why they matter so much, what changed under the hood, and what the real benchmarks say. By the end, you’ll have everything you need to decide whether to flip the switch in your own services.&lt;h2 class=wp-block-heading&gt;1. First Things First: What Is an Object Header?&lt;/h2&gt;&lt;p&gt;Before we talk about making object headers smaller, it’s worth understanding what they actually are — because most developers never think about them at all.&lt;p&gt;In the HotSpot JVM, every Java object stored on the heap carries a small piece of hidden metadata right at the start of its memory layout. This metadata is called the &lt;strong&gt;object header&lt;/strong&gt;, and it consists of two parts:&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Header Component&lt;th class=has-text-align-left data-align=left&gt;Size (traditional)&lt;th class=has-text-align-left data-align=left&gt;Purpose&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Mark Word&lt;/strong&gt;&lt;td&gt;64 bits (8 bytes)&lt;td&gt;Locking state, GC age, identity hash code, biased-lock epoch&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Class Pointer&lt;/strong&gt;&lt;td&gt;32 bits (4 bytes, compressed)&lt;td&gt;Reference to the object’s class metadata in Metaspace&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Array Length&lt;/strong&gt;&lt;td&gt;32 bits (arrays only)&lt;td&gt;Length field appended for array objects&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;Together, that’s &lt;strong&gt;96 bits (12 bytes)&lt;/strong&gt; for regular objects on a 64-bit system with compressed class pointers enabled — and &lt;strong&gt;128 bits (16 bytes)&lt;/strong&gt; without compression. Now here’s the thing that should make you pause: most small Java objects themselves contain only 16–32 bytes of actual data. That means the header alone can account for &lt;strong&gt;20% or more of a typical object’s total memory footprint&lt;/strong&gt;. In a Spring Boot service with millions of tiny wrapper objects, DTO instances, and collection entries, that tax gets enormous.&lt;p&gt;&lt;em&gt;Imagine every book in a library came packaged in a rigid plastic case labelled with metadata. Even if the book itself is a short pamphlet, the plastic case never changes size. That’s essentially what a traditional Java object header does — it’s a fixed-cost overhead regardless of how small the object inside is.&lt;/em&gt;&lt;h2 class=wp-block-heading&gt;2. The Road to JEP 519: A Quick History Lesson&lt;/h2&gt;&lt;p&gt;This feature didn’t appear overnight. It’s the result of several years of careful engineering inside the OpenJDK community, most of it driven by &lt;strong&gt;&lt;a href=https://openjdk.org/projects/lilliput/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;Project Lilliput&lt;/a&gt;&lt;/strong&gt; — an initiative specifically focused on shrinking Java object headers. The project was originally kicked off by Roman Kennke at Red Hat, and the journey to production looked like this:&lt;p&gt;&lt;strong&gt;2022- Project Lilliput reaches its first milestone&lt;/strong&gt;&lt;p&gt;The team demonstrates a working prototype reducing headers to 64 bits, setting the technical direction for what would follow.&lt;p&gt;&lt;strong&gt;JDK 22 · 2024- Object Monitor Tables infrastructure lands&lt;/strong&gt;&lt;p&gt;A necessary stepping stone: locking state is moved out of the header into a side table, making header compression possible without breaking synchronization semantics.&lt;p&gt;&lt;strong&gt;JDK 24 · March 2025- &lt;a href=https://openjdk.org/jeps/450 target=_blank rel=&#34;noreferrer noopener&#34;&gt;JEP 450&lt;/a&gt; — Compact Object Headers (Experimental)&lt;/strong&gt;&lt;p&gt;Available behind &lt;code&gt;-XX:+UnlockExperimentalVMOptions&lt;/code&gt;, the feature enters the wild for the first time. Amazon begins testing it in production services.&lt;p&gt;&lt;strong&gt;JDK 25 · September 2025- &lt;a href=https://openjdk.org/jeps/519 target=_blank rel=&#34;noreferrer noopener&#34;&gt;JEP 519&lt;/a&gt; — Compact Object Headers (Product)&lt;/strong&gt;&lt;p&gt;Promoted to a stable product feature. The experimental flag is gone. All it takes is &lt;code&gt;-XX:+UseCompactObjectHeaders&lt;/code&gt;.&lt;p&gt;It’s also worth noting that &lt;strong&gt;Amazon&lt;/strong&gt; and &lt;strong&gt;SAP&lt;/strong&gt; both played key roles in validating this feature. Amazon ran compact headers across hundreds of production services — many using backports to JDK 17 and 21 — before a single production-ready release shipped. SAP went a step further and &lt;a href=https://openjdk.org/jeps/8361187 target=_blank rel=&#34;noreferrer noopener&#34;&gt;enabled compact object headers by default&lt;/a&gt; in their own JDK 25 fork (SapMachine). That level of real-world confidence is rare, and it tells you a lot about how thoroughly this feature was tested.&lt;div style=&#34;display:inline-block; margin: 15px 0;&#34;&gt;&lt;div id=adngin-JavaCodeGeeks_incontent_video-0 style=display:inline-block;&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;h2 class=wp-block-heading&gt;3. What Actually Changed Under the Hood&lt;/h2&gt;&lt;p&gt;The key insight of Compact Object Headers is elegantly simple: instead of keeping the mark word and the class pointer as two separate fields, &lt;strong&gt;they are merged into a single 64-bit word&lt;/strong&gt;. The class pointer is compressed from 32 bits down to just 22 bits — which still supports approximately &lt;strong&gt;4 million unique classes&lt;/strong&gt;, far beyond any realistic application requirement. The remaining bits accommodate GC metadata, lock state, hash codes, and four bits reserved for future use by &lt;a href=https://openjdk.org/projects/valhalla/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;Project Valhalla&lt;/a&gt;.&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Layout&lt;th class=has-text-align-left data-align=left&gt;Mark Word&lt;th class=has-text-align-left data-align=left&gt;Class Pointer&lt;th class=has-text-align-left data-align=left&gt;Total Size&lt;th class=has-text-align-left data-align=left&gt;Status&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Traditional (default)&lt;/strong&gt;&lt;td&gt;64 bits&lt;td&gt;32 bits&lt;td&gt;96 bits / 12 bytes&lt;td&gt;Pre-JDK 25 default&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Compact (JEP 519)&lt;/strong&gt;&lt;td class=has-text-align-center data-align=center colspan=2&gt;Merged into single 64-bit word&lt;br&gt;&lt;small&gt;(22-bit class ptr + GC + lock + hash + 4 reserved bits)&lt;/small&gt;&lt;td&gt;64 bits / 8 bytes&lt;td&gt;JDK 25 opt-in&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;The change requires &lt;strong&gt;Compressed Class Pointers&lt;/strong&gt; to be enabled (which they are by default on 64-bit systems with heaps under 32 GB). Hash codes and monitor information that used to live directly in the header are now stored in lightweight side tables, indexed by object address — a technique that adds negligible overhead because very few objects actually need those features at any given time.&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;“Compact object headers eliminate the division between the mark word and the class pointer by subsuming the class pointer in compressed form into the mark word.”— &lt;a href=https://www.baeldung.com/java-object-header-reduced-size-save-memory target=_blank rel=&#34;noreferrer noopener&#34;&gt;Baeldung, JEP 519 Deep Dive&lt;/a&gt;&lt;/blockquote&gt;&lt;h2 class=wp-block-heading&gt;4. The Numbers: What the Benchmarks Actually Show&lt;/h2&gt;&lt;p&gt;Now for the part everyone really wants to know — does this actually make a difference? The benchmarks, sourced directly from the &lt;a href=https://openjdk.org/jeps/519 target=_blank rel=&#34;noreferrer noopener&#34;&gt;official JEP 519 specification&lt;/a&gt;, give a clear and consistent answer: yes, significantly.&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-23.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-23.png.webp fetchpriority=high decoding=async width=595 height=125 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-23.png.webp alt class=wp-image-143000 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-23.png.webp 595w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-23-300x63.png.webp 300w&#34; data-sizes=&#34;(max-width: 595px) 100vw, 595px&#34;&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async width=595 height=125 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-23.png.webp alt class=wp-image-143000 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-23.png.webp 595w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-23-300x63.png.webp 300w&#34; sizes=&#34;(max-width: 595px) 100vw, 595px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p class=has-text-align-center&gt;&lt;strong&gt;SPECjbb2015 Performance Gains with JEP 519&lt;/strong&gt;&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-37.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-37.png.webp decoding=async width=573 height=461 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-37.png.webp alt class=wp-image-143001 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-37.png.webp 573w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-37-300x241.png.webp 300w&#34; data-sizes=&#34;(max-width: 573px) 100vw, 573px&#34;&gt;&lt;noscript&gt;&lt;img decoding=async width=573 height=461 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-37.png.webp alt class=wp-image-143001 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-37.png.webp 573w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-23-37-300x241.png.webp 300w&#34; sizes=&#34;(max-width: 573px) 100vw, 573px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption class=wp-element-caption&gt;Real benchmark data from the official JEP 519 specification — comparing traditional vs. compact headers across key metrics.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Furthermore, &lt;a href=https://javapro.io/2026/02/10/mastering-memory-efficiency-with-compact-object-headers-in-jdk-25/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;JAVAPRO’s benchmark&lt;/a&gt; with 10 million Point objects on JDK 25 found up to &lt;strong&gt;30% less committed memory&lt;/strong&gt; and &lt;strong&gt;12% less used memory&lt;/strong&gt; with compact headers enabled. Meanwhile, Spring Boot and microservice workloads typically see &lt;strong&gt;3–5% throughput improvements&lt;/strong&gt; and &lt;strong&gt;4–6% reductions in P99 latency&lt;/strong&gt;, according to testing reported by &lt;a href=https://medium.com/@vinodjagwani/java-25-jep-519-smaller-memory-footprint-smarter-cpu-usage-af835d23e361 target=_blank rel=&#34;noreferrer noopener&#34;&gt;Vinod Jagwani’s analysis&lt;/a&gt;.&lt;p class=has-text-align-center&gt;&lt;strong&gt;Estimated Memory Savings by Workload Type&lt;/strong&gt;&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-25-00.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-25-00.png.webp decoding=async width=571 height=411 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-25-00.png.webp alt class=wp-image-143002 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-25-00.png.webp 571w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-25-00-300x216.png.webp 300w&#34; data-sizes=&#34;(max-width: 571px) 100vw, 571px&#34;&gt;&lt;noscript&gt;&lt;img decoding=async width=571 height=411 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-25-00.png.webp alt class=wp-image-143002 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-25-00.png.webp 571w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-21_22-25-00-300x216.png.webp 300w&#34; sizes=&#34;(max-width: 571px) 100vw, 571px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption class=wp-element-caption&gt;Object-heavy workloads with many small instances benefit the most. Large-object workloads see modest but still measurable gains.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;It’s equally important to be honest about where the gains are smaller. If your application primarily deals with &lt;strong&gt;large arrays or a handful of long-lived persistent objects&lt;/strong&gt;, the savings will be less dramatic. The four bytes per object only compound meaningfully when object count is high — and in modern Java, that threshold is crossed more often than not.&lt;h2 class=wp-block-heading&gt;5. How to Enable It — and When to Hold Off&lt;/h2&gt;&lt;p&gt;Even though JEP 519 is a product feature in JDK 25, it is &lt;strong&gt;not enabled by default&lt;/strong&gt; (though a &lt;a href=https://openjdk.org/jeps/8361187 target=_blank rel=&#34;noreferrer noopener&#34;&gt;draft JEP&lt;/a&gt; proposing to make it default is already in progress). Enabling it is a single JVM flag&lt;p&gt;&lt;em&gt;JVM Flag — Enable Compact Object Headers&lt;/em&gt;&lt;pre class=brush:java&gt;java -XX:+UseCompactObjectHeaders -jar your-application.jar&#xA;&lt;/pre&gt;&lt;p&gt;If you want to verify the feature is active at startup, you can add the &lt;code&gt;-XX:+PrintFlagsFinal&lt;/code&gt; flag and grep for the relevant setting:&lt;p&gt;&lt;em&gt;Verify the flag is active&lt;/em&gt;&lt;pre class=brush:java&gt;java -XX:+UseCompactObjectHeaders -XX:+PrintFlagsFinal -version 2&amp;gt;&amp;amp;1 | grep UseCompactObjectHeaders&#xA;&lt;/pre&gt;&lt;p&gt;You should see output like: &lt;code&gt;bool UseCompactObjectHeaders = true&lt;/code&gt;.&lt;p&gt;&lt;strong&gt;Requirements checklist&lt;/strong&gt;&lt;p&gt;To use JEP 519, you need:&lt;p&gt;&lt;strong&gt;(1)&lt;/strong&gt;JDK 25 or later,&lt;p&gt;&lt;strong&gt;(2)&lt;/strong&gt;a 64-bit system,&lt;p&gt;&lt;strong&gt;(3)&lt;/strong&gt;Compressed Class Pointers enabled (default on heaps ≤ 32 GB). If your heap exceeds 32 GB, compact headers cannot be used since they depend on compressed class pointer encoding.&lt;p&gt;That said, there are legitimate reasons to hold off. Highly regulated environments with strict certification requirements, or teams with limited test coverage, may prefer to upgrade the JDK first and enable this feature in a later rollout. The JEP documentation is explicit that this is a conservative, not a correctness, concern — the feature itself is considered fully stable.&lt;blockquote class=&#34;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&#34;&gt;&lt;p&gt;Some native code or tooling that relies on assumptions about fixed object layout may need updating to be header-aware. Additionally, ZGC is not currently supported with compact headers — workloads using ZGC will need to switch to G1 or Parallel collectors to take advantage of JEP 519.&lt;/blockquote&gt;&lt;h2 class=wp-block-heading&gt;6. Why This Matters Most in the Cloud&lt;/h2&gt;&lt;p&gt;For on-premises applications running on dedicated hardware, a 22% heap reduction is nice to have. But in cloud and containerised environments, it translates directly into &lt;strong&gt;real, measurable cost savings&lt;/strong&gt;.&lt;p&gt;Think about it this way: if each container instance needs 22% less heap, you can either run the same number of instances on smaller, cheaper VMs — or pack more instances onto your existing infrastructure. Either way, you’re paying less. As &lt;a href=https://blog.gceasy.io/java-finops-memory-tuning/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;GCEasy’s FinOps analysis&lt;/a&gt; notes, this compounds particularly well across microservices architectures, where dozens of services benefit simultaneously.&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=has-text-align-left data-align=left&gt;Benefit&lt;th class=has-text-align-left data-align=left&gt;Mechanism&lt;th class=has-text-align-left data-align=left&gt;Typical Impact&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Heap reduction&lt;td&gt;4 bytes saved per object × millions of objects&lt;td&gt;10–22% less heap used&lt;tr&gt;&lt;td&gt;CPU efficiency&lt;td&gt;Better CPU cache utilisation (more objects fit in L1/L2)&lt;td&gt;5–8% less CPU time&lt;tr&gt;&lt;td&gt;GC pressure&lt;td&gt;Smaller heap → fewer and shorter GC cycles&lt;td&gt;15% fewer GC runs&lt;tr&gt;&lt;td&gt;Container density&lt;td&gt;Lower memory per pod → more pods per node&lt;td&gt;Higher pod density&lt;tr&gt;&lt;td&gt;Latency (P99)&lt;td&gt;Shorter GC pauses → more consistent response times&lt;td&gt;4–6% P99 improvement&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;The bottom line: workloads that benefit most from JEP 519 are &lt;strong&gt;Spring Boot APIs&lt;/strong&gt;, &lt;strong&gt;microservices with deep object graphs&lt;/strong&gt;, &lt;strong&gt;caching layers&lt;/strong&gt;, &lt;strong&gt;ORM-heavy applications&lt;/strong&gt;, and &lt;strong&gt;data pipelines&lt;/strong&gt; where thousands of small DTOs or records are processed in bulk. If your application fits any of those descriptions — and most production Java applications do — this feature is worth enabling and benchmarking.&lt;h2 class=wp-block-heading&gt;7. Looking Ahead: What Comes Next for Project Lilliput?&lt;/h2&gt;&lt;p&gt;JEP 519 is not the end of the story. The &lt;a href=https://wiki.openjdk.org/display/lilliput/Main target=_blank rel=&#34;noreferrer noopener&#34;&gt;Project Lilliput wiki&lt;/a&gt; already outlines work on &lt;strong&gt;Lilliput 2&lt;/strong&gt;, which aims to push object headers down to just &lt;strong&gt;4 bytes&lt;/strong&gt;. That would be a further 50% reduction on top of what JEP 519 delivers today.&lt;p&gt;Additionally, the four bits reserved in the current 64-bit header for &lt;a href=https://openjdk.org/projects/valhalla/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;Project Valhalla&lt;/a&gt; hint at deeper integration ahead — particularly around value types, which promise to eliminate object headers entirely for certain kinds of objects by flattening them inline into their containing structure.&lt;p&gt;Furthermore, a &lt;a href=https://openjdk.org/jeps/8361187 target=_blank rel=&#34;noreferrer noopener&#34;&gt;draft JEP&lt;/a&gt; is already circulating to make compact object headers &lt;strong&gt;the default&lt;/strong&gt; in a future JDK release. When that happens, every Java application will benefit automatically, without any flag required.&lt;h2 class=wp-block-heading&gt;8. What We’ve Learned&lt;/h2&gt;&lt;p&gt;In this article, we explored &lt;strong&gt;JEP 519&lt;/strong&gt; — one of those rare JVM improvements that is completely invisible to your application code yet delivers some of the most tangible performance gains in recent Java history. We started by understanding what object headers are and why their 12-byte size had been a long-standing inefficiency. We then traced the multi-year journey from &lt;strong&gt;Project Lilliput&lt;/strong&gt; through the experimental &lt;strong&gt;JEP 450&lt;/strong&gt; in JDK 24, all the way to the stable product feature in &lt;strong&gt;JDK 25&lt;/strong&gt;.&lt;p&gt;We looked at the real benchmark numbers — &lt;strong&gt;22% heap reduction, 15% fewer GC cycles, and 8% less CPU time&lt;/strong&gt; on SPECjbb2015 — and we learned how a single JVM flag (&lt;code&gt;-XX:+UseCompactObjectHeaders&lt;/code&gt;) is all it takes to unlock these gains. Finally, we discussed the cloud cost implications, the workloads that benefit most, and the road ahead with Lilliput 2 and Project Valhalla on the horizon.&lt;/p&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-nkDA3dYKVZMEqTrt lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=nkDA3dYKVZMEqTrt data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-9J5eNu7OhpsGfSn4-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-9J5eNu7OhpsGfSn4-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-9J5eNu7OhpsGfSn4-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png.webp decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png.webp alt width=320 height=363&gt;&lt;noscript&gt;&lt;img decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png.webp alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-nkDA3dYKVZMEqTrt lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=nkDA3dYKVZMEqTrt data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-nkDA3dYKVZMEqTrt value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/java25 rel=tag&gt;Java25&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/jep519 rel=tag&gt;JEP519&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/jvm-performance rel=tag&gt;JVM Performance&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Eleftheria Drosopoulou</author>
      <guid>https://www.javacodegeeks.com/2026/04/compact-object-headers-the-invisible-jdk-25-featurewith-the-biggest-memory-impact.html</guid>
      <pubDate>Wed, 29 Apr 2026 07:21:00 +0000</pubDate>
    </item>
    <item>
      <title>Project Babylon: Code Reflection and What It Means for ML on the JVM</title>
      <link>https://www.javacodegeeks.com/2026/04/project-babylon-code-reflection-and-what-it-means-for-ml-on-the-jvm.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java&gt;Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;Project Babylon: Code Reflection and What It Means for ML on the JVM&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-7&#34; href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;Project Babylon: Code Reflection and What It Means for ML on the JVM&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;div class=&#34;stream-item stream-item-above-post-content&#34;&gt;&lt;div class=stream-item-size&gt;&lt;div id=adngin-in-post-0 style=&#34;float:left; margin-right:20px; margin-bottom:10px; width:300px; height:274px;&#34;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;For most of its history, Java has sat on the sidelines of the machine learning conversation. Python dominated that space, and for understandable reasons: it had the libraries, the ecosystem, and direct pathways to GPU hardware. Java, by contrast, had none of that. If you wanted to train a model or run GPU-accelerated inference in Java, your choices were to call Python over HTTP, vendor-specific JNI bindings, or accept that some workloads just weren’t a Java problem.&lt;p&gt;Project Babylon, an active &lt;a href=https://openjdk.org/projects/babylon/&gt;OpenJDK project&lt;/a&gt; led by Oracle Library Architect Paul Sandoz, is quietly dismantling that assumption. And in 2026, it’s doing so in a very concrete way.&lt;p&gt;The chart below frame both where we are today — in terms of real performance numbers from TornadoVM benchmarks — and where Project Babylon is heading on its development roadmap. Now let’s walk through the full story.&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-26.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-26.png fetchpriority=high decoding=async width=606 height=297 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-26.png alt class=wp-image-142951 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-26.png 606w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-26-300x147.png 300w&#34; data-sizes=&#34;(max-width: 606px) 100vw, 606px&#34;&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async width=606 height=297 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-26.png alt class=wp-image-142951 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-26.png 606w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-26-300x147.png 300w&#34; sizes=&#34;(max-width: 606px) 100vw, 606px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption class=wp-element-caption&gt;Project Babylon — key milestones &amp;amp; development status (2023–2027)&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;h2 class=wp-block-heading&gt;1. What Is Project Babylon, Really?&lt;/h2&gt;&lt;p&gt;At its core, Babylon’s primary goal is to extend the reach of Java to foreign programming models such as SQL, differentiable programming, machine learning models, and GPUs. &lt;a href=https://openjdk.org/projects/babylon/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;OpenJDK&lt;/a&gt; The mechanism it uses to achieve this is called &lt;strong&gt;code reflection&lt;/strong&gt; — and it’s worth understanding what makes that different from the Java reflection you already know.&lt;p&gt;Standard Java reflection lets you inspect a class at runtime: what fields it has, what methods it exposes, what annotations are present. That’s useful, but it tells you nothing about &lt;em&gt;what the code inside a method actually does&lt;/em&gt;. You can see that a method called &lt;code&gt;computeGradient&lt;/code&gt; exists, but you can’t look inside it and see the mathematical operations it performs.&lt;p&gt;Code reflection changes that entirely. In the context of Babylon, a code model is a representation of a program — for example, a Java method — that is produced by the &lt;code&gt;javac&lt;/code&gt; compiler and stored in the class file. &lt;a href=https://jjfumero.github.io/posts/2025/02/07/babylon-and-tornadovm&gt;Babylon’s enhanced reflection API&lt;/a&gt; empowers developers to access and manipulate these code models at runtime, enabling metaprogramming directly within Java.&lt;p&gt;In even plainer terms: Babylon lets Java see its own source-level intent — not just compiled bytecode — and use that symbolic description to do something completely new with it. Translate it to GPU kernel code. Differentiate it mathematically. Convert it to SQL. The same underlying mechanism serves all of those goals.&lt;h2 class=wp-block-heading&gt;2. The Missing Piece: Why Bytecode Wasn’t Enough&lt;/h2&gt;&lt;p&gt;To understand why this matters, it helps to know why existing approaches fell short. Java bytecode is a well-understood, stable format — but it’s an &lt;em&gt;optimised&lt;/em&gt; representation. By the time the compiler is done, a lot of the original programmer intent has been erased. Variable names are gone, high-level constructs have been flattened, and the mathematical &lt;em&gt;meaning&lt;/em&gt; of a computation is no longer visible.&lt;p&gt;Consequently, access to Java code in symbolic form has been currently limited to the use of non-standard APIs or to conventions at different points in the program’s life cycle, and the symbolic forms available — abstract syntax trees or bytecodes — are often ill-suited to analysis and transformation.&lt;p&gt;This is precisely the gap that code reflection fills. A method annotated with &lt;code&gt;@CodeReflection&lt;/code&gt; produces a model that sits above bytecode — closer to what the programmer wrote, with the structural and type information that makes it amenable to transformation. A GPU backend can then walk that model, recognise the computational structure, and emit the appropriate GPU code. All from a Java library. No separate tools. No separate source files.&lt;div style=&#34;display:inline-block; margin: 15px 0;&#34;&gt;&lt;div id=adngin-JavaCodeGeeks_incontent_video-0 style=display:inline-block;&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;h2 class=wp-block-heading&gt;3. HAT: The GPU Layer Built on Top of Babylon&lt;/h2&gt;&lt;p&gt;The most tangible demonstration of Babylon’s capabilities is the &lt;a href=https://openjdk.org/projects/babylon/articles/hat-matmul/hat-matmul&gt;Heterogeneous Accelerator Toolkit (HAT)&lt;/a&gt;, developed alongside the core project.&lt;p&gt;HAT is a parallel programming framework that allows Java developers to offload Java code and dispatch the generated code on modern hardware accelerators such as GPUs. HAT can be used to speed up massive parallel workloads such as deep learning, AI, big data analytics, and physics simulations by automatically offloading and running these workloads on specialized hardware. &lt;a href=https://openjdk.org/projects/babylon/articles/hat-matmul/hat-matmul target=_blank rel=&#34;noreferrer noopener&#34;&gt;OpenJDK&lt;/a&gt;&lt;p&gt;The compilation pipeline is elegantly simple compared to what came before. A developer annotates a method with &lt;code&gt;@CodeReflection&lt;/code&gt;. The &lt;code&gt;javac&lt;/code&gt; compiler generates the code model and stores it in the class file. At runtime, HAT reads that model, lowers it through a series of transformation stages, and produces GPU-native code — OpenCL C, CUDA PTX, or SPIR-V — which the GPU driver then compiles to a final binary. No JNI. No C. No separate GPU source files to maintain. &lt;a href=https://www.javacodegeeks.com/2026/03/the-jvm-project-no-one-is-talking-about-that-will-change-everything.html target=_blank rel=&#34;noreferrer noopener&#34;&gt;Java Code Geeks&lt;/a&gt;&lt;p&gt;As of early 2026, HAT supports OpenCL and CUDA backends with SPIR-V under active development.&lt;h2 class=wp-block-heading&gt;4. The Use Cases: Far Wider Than Just GPUs&lt;/h2&gt;&lt;p&gt;One of the most underappreciated aspects of Babylon is that GPU programming is actually just the &lt;em&gt;proof of concept&lt;/em&gt;. The same code reflection mechanism unlocks several other use cases that enterprise Java teams will find immediately relevant.&lt;figure class=wp-block-table&gt;&lt;table class=has-fixed-layout&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Use Case&lt;th&gt;What Babylon Enables&lt;th&gt;Status&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU kernel offload&lt;td&gt;Write parallel Java → compiled to OpenCL/CUDA&lt;td&gt;Active (HAT)&lt;tr&gt;&lt;td&gt;Automatic differentiation&lt;td&gt;Java methods mathematically differentiated for ML training&lt;td&gt;PoC demonstrated&lt;tr&gt;&lt;td&gt;LINQ-style queries&lt;td&gt;Lambda expressions translated to SQL/query languages&lt;td&gt;PoC demonstrated&lt;tr&gt;&lt;td&gt;ONNX/LLM inference&lt;td&gt;ONNX model graphs executed via Java code models&lt;td&gt;PoC demonstrated (Nov 2025)&lt;tr&gt;&lt;td&gt;Differentiable programming&lt;td&gt;Gradients computed from plain Java functions&lt;td&gt;Research prototype&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;The ONNX angle is particularly interesting for enterprise teams. A November 2025 inside.java article demonstrates using Babylon to run ONNX-based generative AI models in Java, with code models providing the bridge between Java’s type system and ONNX’s computational graph format. For organisations that want to run LLM inference inside their existing Java infrastructure — rather than spinning up a Python microservice — this is a genuinely new path.&lt;p&gt;Meanwhile, Project Babylon enables developers to build and run AI models such as LLMs, image classifiers, or object detection algorithms directly in &lt;a href=https://inside.java/2025/10/25/devoxxbelgium-writing-gpuready-ai-models-in-java/&gt;Java&lt;/a&gt;. With code reflection, machine learning logic can be defined in plain Java code, eliminating the need for Python or external model files.&lt;h2 class=wp-block-heading&gt;5. Where Things Stand in 2026&lt;/h2&gt;&lt;p&gt;It’s important to be honest about the timeline here, because Babylon is genuinely exciting — and also genuinely not yet production-ready as a standard JDK feature.&lt;p&gt;For Project Babylon, 2026 plans include incubating code reflection, which allows third-party frameworks to reflect over &lt;a href=https://www.infoworld.com/article/4115794/oracle-unveils-java-development-plans-for-2026.htm&gt;Java code&lt;/a&gt; in a lambda expression and process it. The Babylon team is also working on proofs of concept for using code reflection to run machine learning models on the GPU.&lt;p&gt;The API lives in the &lt;code&gt;jdk.incubator.code&lt;/code&gt; module. Compilation and execution of dependent code requires that this module be made visible by explicitly adding it to the list of modules, for example with the command line option &lt;code&gt;--add-modules jdk.incubator.code&lt;/code&gt;. In other words, it’s available to experiment with today, but it requires opting in deliberately.&lt;p&gt;Babylon is not shipping in JDK 26 or 27. The project leadership has explicitly stated delivery will happen via a series of JEPs across multiple feature releases. This is a very deliberate approach — the team wants to get code reflection right before formalising it through the JEP process. Given that code reflection is a foundational primitive on which many future capabilities will be built, that caution is well justified.&lt;h2 class=wp-block-heading&gt;6. TornadoVM: The Production Bridge Right Now&lt;/h2&gt;&lt;p&gt;Because Babylon is still incubating, the practical question for teams that need GPU acceleration in Java &lt;em&gt;today&lt;/em&gt; is: what do you use in the meantime?&lt;p&gt;The answer is &lt;a href=https://www.tornadovm.org&gt;TornadoVM&lt;/a&gt;, which reached version 2.0 in December 2025. TornadoVM automatically accelerates Java programs on multi-core CPUs, GPUs, and FPGAs. This release is of particular interest to teams developing LLM solutions on the JVM.&lt;p&gt;The performance numbers are striking. When running on GPUs, TornadoVM can achieve up to 39× and 270× speedup compared to sequential Java for Intel HD Graphics and NVIDIA GPUs respectively. &lt;a href=https://www.infoq.com/articles/tornadovm-java-gpu-fpga/ target=_blank rel=&#34;noreferrer noopener&#34;&gt;InfoQ&lt;/a&gt; The chart below shows real benchmark figures from a matrix multiplication workload at the JVM Advent 2025.&lt;div class=wp-block-image&gt;&lt;figure class=&#34;aligncenter size-full&#34;&gt;&lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-13.png&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-13.png decoding=async width=598 height=273 data-src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-13.png alt class=wp-image-142950 data-srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-13.png 598w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-13-300x137.png 300w&#34; data-sizes=&#34;(max-width: 598px) 100vw, 598px&#34;&gt;&lt;noscript&gt;&lt;img decoding=async width=598 height=273 src=https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-13.png alt class=wp-image-142950 srcset=&#34;https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-13.png 598w, https://www.javacodegeeks.com/wp-content/uploads/2026/04/2026-04-20_12-38-13-300x137.png 300w&#34; sizes=&#34;(max-width: 598px) 100vw, 598px&#34;&gt;&lt;/noscript&gt;&lt;/a&gt;&lt;figcaption class=wp-element-caption&gt;TornadoVM — matrix multiply speedup vs. sequential Java (2048×8192, JVM Advent 2025 benchmarks)&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;TornadoVM offers two complementary ways to express parallelism: the Loop Parallel API, which uses Java annotations such as &lt;code&gt;@Parallel&lt;/code&gt; and &lt;code&gt;@Reduce&lt;/code&gt; to parallelize loops, and the Kernel API, which provides explicit GPU-style programming with concepts such as thread IDs, local memory, and barriers — similar to CUDA and OpenCL.&lt;p&gt;The relationship between TornadoVM and Babylon is complementary rather than competitive. TornadoVM, shipping today with up to 270× speedups over sequential Java and full LLM inference support, shows that Java GPU programming is already real — Babylon wants to make it standard platform infrastructure rather than a sophisticated plugin. &lt;a href=https://www.javacodegeeks.com/2026/03/the-jvm-project-no-one-is-talking-about-that-will-change-everything.html target=_blank rel=&#34;noreferrer noopener&#34;&gt;Java Code Geeks&lt;/a&gt; TornadoVM solves the production problem now. Babylon solves it at the platform level, for every Java developer, without requiring a specialised framework.&lt;h2 class=wp-block-heading&gt;7. What This Means for Enterprise Java Teams&lt;/h2&gt;&lt;p&gt;The practical implication of all this research is something quite significant: the long-held assumption that Java is not a serious language for ML or GPU-accelerated workloads is starting to look outdated.&lt;p&gt;For teams building microservices in Java who currently call a Python ML service over HTTP, Babylon and TornadoVM together represent a realistic path to collapsing that boundary. Model inference could live in the same JVM process as the business logic that uses it. Gradients for on-device learning could be computed from plain Java methods. ONNX models could be loaded and run without a runtime language switch.&lt;p&gt;That said, it’s equally important to have realistic expectations. Babylon’s incubation is a genuine signal of forward momentum, but what exists today is a development branch that tracks mainline, active research prototypes, and a growing body of published demonstrations. Teams should watch the project closely — particularly the talks at JVMLS and JavaOne, which have consistently been the best windows into where the project is heading — but should not design production systems around Babylon APIs that are still evolving.&lt;p&gt;The right posture in 2026 is to experiment with Babylon today (using &lt;code&gt;--add-modules jdk.incubator.code&lt;/code&gt;), run production GPU workloads on TornadoVM, and keep an eye on when the first formal JEPs from the Babylon project land.&lt;h2 class=wp-block-heading&gt;8. What We’ve Learned&lt;/h2&gt;&lt;p&gt;Project Babylon is one of the most architecturally ambitious things happening in the OpenJDK ecosystem today. Its core innovation — code reflection — gives Java the ability to reason about its own source-level intent for the first time in a standardised, platform-native way. Built on top of that foundation, the Heterogeneous Accelerator Toolkit (HAT) provides a pure-Java path to GPU kernel execution without C, JNI, or separate GPU source files, while ONNX-based ML inference prototypes demonstrate that running AI models natively in Java is no longer a thought experiment.&lt;p&gt;In 2026, the project is in active incubation, with GPU ML proof-of-concepts under development and a formal JEP process expected across multiple future releases. TornadoVM 2.0 bridges the gap for teams that need production-grade GPU acceleration today. Together, they paint a picture of a JVM platform that is seriously, methodically closing the gap with Python on machine learning — not by copying Python’s model, but by extending Java’s own strengths.&lt;/p&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-nvvG13Zp4VKa5RAN lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=nvvG13Zp4VKa5RAN data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-PpfAB6Nnjr6injbi-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-PpfAB6Nnjr6injbi-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-PpfAB6Nnjr6injbi-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;noscript&gt;&lt;img decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-nvvG13Zp4VKa5RAN lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=nvvG13Zp4VKa5RAN data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-nvvG13Zp4VKa5RAN value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/java-gpu rel=tag&gt;java gpu&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/project-babylon rel=tag&gt;project babylon&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Eleftheria Drosopoulou</author>
      <guid>https://www.javacodegeeks.com/2026/04/project-babylon-code-reflection-and-what-it-means-for-ml-on-the-jvm.html</guid>
      <pubDate>Tue, 28 Apr 2026 16:36:00 +0000</pubDate>
    </item>
    <item>
      <title>A Guide to Exporting and Backing Up H2 Databases</title>
      <link>https://www.javacodegeeks.com/a-guide-to-exporting-and-backing-up-h2-databases.html</link>
      <description>&lt;header class=entry-header-outer&gt;&lt;nav id=breadcrumb&gt;&lt;a href=https://www.javacodegeeks.com/&gt;&lt;span class=tie-icon-home aria-hidden=true&gt;&lt;/span&gt;Home&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java&gt;Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;a href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;em class=delimiter&gt;»&lt;/em&gt;&lt;span class=current&gt;A Guide to Exporting and Backing Up H2 Databases&lt;/span&gt;&lt;/nav&gt;&lt;div class=entry-header&gt;&lt;span class=post-cat-wrap&gt;&lt;a class=&#34;post-cat tie-cat-7&#34; href=https://www.javacodegeeks.com/category/java/core-java&gt;Core Java&lt;/a&gt;&lt;/span&gt;&lt;h1 class=&#34;post-title entry-title&#34;&gt;A Guide to Exporting and Backing Up H2 Databases&lt;/h1&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&#34;entry-content entry clearfix&#34;&gt;&lt;div class=&#34;stream-item stream-item-above-post-content&#34;&gt;&lt;div class=stream-item-size&gt;&lt;div id=adngin-in-post-0 style=&#34;float:left; margin-right:20px; margin-bottom:10px; width:300px; height:274px;&#34;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Data protection is a critical aspect of application development. Applications that rely on embedded databases, such as the H2 Database Engine, must implement mechanisms to preserve and recover data. Export and backup strategies provide reliable approaches for maintaining data integrity and ensuring continuity in the event of unexpected failures. In this article, database backup and export concepts are examined with practical H2 implementations in Java.&lt;h2 class=wp-block-heading&gt;1. Understanding Backups and Exports&lt;/h2&gt;&lt;p&gt;Backups and exports are related concepts, but they serve different purposes in database management. A &lt;strong&gt;backup&lt;/strong&gt; refers to a complete and consistent copy of the database at a specific point in time. It is primarily used for disaster recovery and system restoration. An &lt;strong&gt;export&lt;/strong&gt; is the process of extracting database data into a portable format, such as SQL or CSV. It is commonly used for data migration, reporting, or integration with other systems.&lt;p&gt;The distinction between backups and exports lies in their structure and use cases. Backups typically preserve the entire database in a format that can be restored quickly with minimal transformation. Exports transform data into formats that are easier to read, transfer, or process externally. Backups prioritize recovery and consistency while exports prioritize portability and flexibility.&lt;h2 class=wp-block-heading&gt;2. Backup Using &lt;code&gt;BACKUP TO&lt;/code&gt; SQL Command&lt;/h2&gt;&lt;p&gt;The H2 engine provides a BACKUP command that creates a compressed archive containing a consistent snapshot of the database.&lt;pre class=brush:java&gt;public class BackupService {&#xA;&#xA;    public static void backupDatabase(String backupPath) {&#xA;        try (Connection conn = DatabaseConfig.getConnection(); Statement stmt = conn.createStatement()) {&#xA;&#xA;            String sql = &amp;#34;BACKUP TO &amp;#39;&amp;#34; + backupPath + &amp;#34;&amp;#39;&amp;#34;;&#xA;            stmt.execute(sql);&#xA;&#xA;            IO.println(&amp;#34;Backup completed&amp;#34;);&#xA;&#xA;        } catch (Exception e) {&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;This implementation executes the BACKUP TO SQL command using a JDBC statement. The command generates a compressed archive file that represents a consistent snapshot of the database. This method can be executed while the database is running, which makes it suitable for production environments.&lt;div style=&#34;display:inline-block; margin: 15px 0;&#34;&gt;&lt;div id=adngin-JavaCodeGeeks_incontent_video-0 style=display:inline-block;&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;h2 class=wp-block-heading&gt;3. Export Table Data to CSV Using CSVWRITE&lt;/h2&gt;&lt;p&gt;The H2 engine supports exporting query results directly to a CSV file using the CSVWRITE function.&lt;pre class=brush:java&gt;public class CsvExportService {&#xA;&#xA;    public static void exportToCsv(String filePath) {&#xA;        try (Connection conn = DatabaseConfig.getConnection(); Statement stmt = conn.createStatement()) {&#xA;&#xA;            String sql = &amp;#34;CALL CSVWRITE(&amp;#39;&amp;#34; + filePath + &amp;#34;&amp;#39;, &amp;#39;SELECT * FROM users&amp;#39;)&amp;#34;;&#xA;            stmt.execute(sql);&#xA;&#xA;            IO.println(&amp;#34;CSV export completed&amp;#34;);&#xA;&#xA;        } catch (Exception e) {&#xA;            e.printStackTrace();&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;This class uses the CSVWRITE function to export table data into a CSV file. The SQL query inside the function defines which data is written. The resulting file is suitable for reporting, data exchange, or external processing.&lt;h2 class=wp-block-heading&gt;4. Export Schema and Data Using SCRIPT Command&lt;/h2&gt;&lt;p&gt;When both schema and data are required, the SCRIPT command can be used to generate SQL statements.&lt;pre class=brush:java&gt;public class ScriptExportService {&#xA;&#xA;    public static void exportToSqlScript(String filePath) {&#xA;        try (Connection conn = DatabaseConfig.getConnection(); Statement stmt = conn.createStatement()) {&#xA;&#xA;            String sql = &amp;#34;SCRIPT SIMPLE TO &amp;#39;&amp;#34; + filePath + &amp;#34;&amp;#39; TABLE PUBLIC.USERS&amp;#34;;&#xA;            stmt.execute(sql);&#xA;&#xA;            IO.println(&amp;#34;SQL script export completed&amp;#34;);&#xA;&#xA;        } catch (Exception e) {&#xA;            e.printStackTrace();&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;This implementation generates a SQL script that includes both the table structure and its data. The SIMPLE option produces a clean and readable script. This format is useful for migration and version control purposes.&lt;p&gt;The main class below ties all components together and demonstrates the full workflow.&lt;pre class=brush:java&gt;public class H2BackupDemo {&#xA;&#xA;    public static void main(String[] args) {&#xA;&#xA;        DataInitializer.initialize();&#xA;&#xA;        BackupService.backupDatabase(&amp;#34;./backup/database.zip&amp;#34;);&#xA;        CsvExportService.exportToCsv(&amp;#34;./backup/users.csv&amp;#34;);&#xA;        ScriptExportService.exportToSqlScript(&amp;#34;./backup/users.sql&amp;#34;);&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;This class initializes sample data and executes backup and export operations.&lt;p&gt;&lt;strong&gt;Database Configuration&lt;/strong&gt;&lt;pre class=brush:java&gt;public class DatabaseConfig {&#xA;&#xA;    private static final String JDBC_URL = &amp;#34;jdbc:h2:./data/sampledb&amp;#34;;&#xA;    private static final String USER = &amp;#34;sa&amp;#34;;&#xA;    private static final String PASSWORD = &amp;#34;&amp;#34;;&#xA;&#xA;    public static Connection getConnection() throws SQLException {&#xA;        return DriverManager.getConnection(JDBC_URL, USER, PASSWORD);&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;This class centralizes the database connection logic. The configuration uses a file-based H2 database stored locally.&lt;p&gt;&lt;strong&gt;Sample Table and Data&lt;/strong&gt;&lt;pre class=brush:java&gt;public class DataInitializer {&#xA;&#xA;    public static void initialize() {&#xA;        try (Connection conn = DatabaseConfig.getConnection();&#xA;             Statement stmt = conn.createStatement()) {&#xA;&#xA;            stmt.execute(&amp;#34;CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY, name VARCHAR(100))&amp;#34;);&#xA;            stmt.execute(&amp;#34;INSERT INTO users (id, name) VALUES (1, &amp;#39;Thomas&amp;#39;)&amp;#34;);&#xA;            stmt.execute(&amp;#34;INSERT INTO users (id, name) VALUES (2, &amp;#39;Benjamin&amp;#39;)&amp;#34;);&#xA;&#xA;            IO.println(&amp;#34;Data created&amp;#34;);&#xA;&#xA;        } catch (Exception e) {&#xA;            e.printStackTrace();&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/pre&gt;&lt;p&gt;This class creates a simple table and inserts sample records.&lt;h2 class=wp-block-heading&gt;5. Conclusion&lt;/h2&gt;&lt;p&gt;This article presented a guide to performing backups and exports in H2 databases. It explained the conceptual differences between backups and exports and demonstrated practical implementations using built-in H2 commands. By applying these techniques, developers can ensure data safety, improve recovery capabilities, and support seamless data migration.&lt;h2 class=wp-block-heading&gt;6. Download the Source Code&lt;/h2&gt;&lt;p&gt;This article explored how to perform data export and backup operations with H2 in Java applications.&lt;div class=download&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;br&gt;You can download the full source code of this example here: &lt;a href=https://www.javacodegeeks.com/wp-content/uploads/2026/04/h2-backup-demo.zip&gt;&lt;strong&gt;data export and backup operations with H2 in Java&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;style&gt;.lepopup-progress-60 div.lepopup-progress-t1&gt;div{background-color:#e0e0e0;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{background-color:#bd4070;}.lepopup-progress-60 div.lepopup-progress-t1&gt;div&gt;div{color:#ffffff;}.lepopup-progress-60 div.lepopup-progress-t1&gt;label{color:#444444;}.lepopup-form-60, .lepopup-form-60 *, .lepopup-progress-60 {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box span i{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-signature-box,.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;text&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;email&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;password&#39;],.lepopup-form-60 .lepopup-element div.lepopup-input select,.lepopup-form-60 .lepopup-element div.lepopup-input select option,.lepopup-form-60 .lepopup-element div.lepopup-input textarea{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#555555;font-style:normal;text-decoration:none;text-align:left;background-color:rgba(255, 255, 255, 0.7);background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow: inset 0px 0px 15px -7px #000000;}.lepopup-form-60 .lepopup-element div.lepopup-input ::placeholder{color:#555555; opacity: 0.9;} .lepopup-form-60 .lepopup-element div.lepopup-input ::-ms-input-placeholder{color:#555555; opacity: 0.9;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect::-webkit-scrollbar-thumb{background-color:#cccccc;}.lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-left, .lepopup-form-60 .lepopup-element div.lepopup-input&gt;i.lepopup-icon-right{font-size:20px;color:#444444;border-radius:0px;}.lepopup-form-60 .lepopup-element .lepopup-button,.lepopup-form-60 .lepopup-element .lepopup-button:visited{font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#ffffff;font-weight:700;font-style:normal;text-decoration:none;text-align:center;background-color:#326693;background-image:none;border-width:1px;border-style:solid;border-color:#326693;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label{border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element div.lepopup-input .lepopup-imageselect+label span.lepopup-imageselect-label{font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label:after{background-color:rgba(255, 255, 255, 0.7);}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-square:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl:checked+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;checkbox&#39;].lepopup-checkbox-tgl+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-classic+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-fa-check+label,.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot+label{background-color:rgba(255, 255, 255, 0.7);border-color:#cccccc;color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input input[type=&#39;radio&#39;].lepopup-radio-dot:checked+label:after{background-color:#555555;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]+label:hover{background-color:#bd4070;color:#ffffff;}.lepopup-form-60 .lepopup-element div.lepopup-input div.lepopup-multiselect&gt;input[type=&#39;checkbox&#39;]:checked+label{background-color:#a93a65;color:#ffffff;}.lepopup-form-60 .lepopup-element input[type=&#39;checkbox&#39;].lepopup-tile+label, .lepopup-form-60 .lepopup-element input[type=&#39;radio&#39;].lepopup-tile+label {font-size:15px;color:#444444;font-style:normal;text-decoration:none;text-align:center;background-color:#ffffff;background-image:none;border-width:1px;border-style:solid;border-color:#cccccc;border-radius:0px;box-shadow:none;}.lepopup-form-60 .lepopup-element-error{font-size:15px;color:#ffffff;font-style:normal;text-decoration:none;text-align:left;background-color:#d9534f;background-image:none;}.lepopup-form-60 .lepopup-element-2 {background-color:rgba(226, 236, 250, 1);background-image:none;border-width:1px;border-style:solid;border-color:rgba(216, 216, 216, 1);border-radius:3px;box-shadow: 1px 1px 15px -6px #d7e1eb;}.lepopup-form-60 .lepopup-element-3 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-3 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:26px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-3 .lepopup-element-html-content {min-height:73px;}.lepopup-form-60 .lepopup-element-4 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-4 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:19px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-4 .lepopup-element-html-content {min-height:23px;}.lepopup-form-60 .lepopup-element-5 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-5 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-5 .lepopup-element-html-content {min-height:24px;}.lepopup-form-60 .lepopup-element-6 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-6 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-6 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-7 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-7 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-7 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-8 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-8 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-8 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-9 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-9 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-9 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-10 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-10 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-10 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-11 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-11 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-11 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-12 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-12 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-12 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-13 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-13 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:15px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-13 .lepopup-element-html-content {min-height:18px;}.lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-left, .lepopup-form-60 .lepopup-element-14 div.lepopup-input .lepopup-icon-right {line-height:36px;}.lepopup-form-60 .lepopup-element-15 div.lepopup-input{height:auto;line-height:1;}.lepopup-form-60 .lepopup-element-16 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-16 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:14px;color:#333333;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-16 .lepopup-element-html-content {min-height:5px;}.lepopup-form-60 .lepopup-element-19 * {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-19 {font-family:&#39;Arial&#39;,&#39;arial&#39;;font-size:13px;color:#333333;font-style:normal;text-decoration:none;text-align:left;background-color:transparent;background-image:none;border-width:1px;border-style:none;border-color:transparent;border-radius:0px;box-shadow:none;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.lepopup-form-60 .lepopup-element-19 .lepopup-element-html-content {min-height:363px;}.lepopup-form-60 .lepopup-element-0 * {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;}.lepopup-form-60 .lepopup-element-0 {font-size:15px;color:#ffffff;font-weight:normal;font-style:normal;text-decoration:none;text-align:left;background-color:#5cb85c;background-image:none;border-width:0px;border-style:solid;border-color:#ccc;border-radius:5px;box-shadow: 1px 1px 15px -6px #000000;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;}.lepopup-form-60 .lepopup-element-0 .lepopup-element-html-content {min-height:160px;}&lt;/style&gt;&lt;div class=lepopup-inline style=&#34;margin: 0 auto;&#34;&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-mQcAmVYanREXcdoq lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=mQcAmVYanREXcdoq data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=1 data-xd=off data-width=820 data-height=430 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:820px;height:430px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:820px;height:430px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-2 lepopup-element-rectangle&#34; data-type=rectangle data-top=0 data-left=0 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:501;top:0px;left:0px;width:820px;height:430px;&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-3 lepopup-element-html&#34; data-type=html data-top=7 data-left=10 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:502;top:7px;left:10px;width:797px;height:73px;&gt;&lt;div class=lepopup-element-html-content&gt;Do you want to know how to develop your skillset to become a &lt;span style=&#34;color: #CAB43D; text-shadow: 1px 1px #835D5D;&#34;&gt;Java Rockstar?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-4 lepopup-element-html&#34; data-type=html data-top=83 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:503;top:83px;left:308px;width:473px;height:23px;&gt;&lt;div class=lepopup-element-html-content&gt;Subscribe to our newsletter to start Rocking &lt;span style=&#34;text-decoration: underline;&#34;&gt;right now!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-5 lepopup-element-html&#34; data-type=html data-top=107 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:504;top:107px;left:308px;width:473px;height:24px;&gt;&lt;div class=lepopup-element-html-content&gt;To get you started we give you our best selling eBooks for &lt;span style=&#34;color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;&#34;&gt;FREE!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-6 lepopup-element-html&#34; data-type=html data-top=136 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:505;top:136px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;1.&lt;/span&gt; JPA Mini Book&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-7 lepopup-element-html&#34; data-type=html data-top=156 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:506;top:156px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;2.&lt;/span&gt; JVM Troubleshooting Guide&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-8 lepopup-element-html&#34; data-type=html data-top=176 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:507;top:176px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;3.&lt;/span&gt; JUnit Tutorial for Unit Testing&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-9 lepopup-element-html&#34; data-type=html data-top=196 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:508;top:196px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;4.&lt;/span&gt; Java Annotations Tutorial&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-10 lepopup-element-html&#34; data-type=html data-top=216 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:509;top:216px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;5.&lt;/span&gt; Java Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-11 lepopup-element-html&#34; data-type=html data-top=236 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:510;top:236px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;6.&lt;/span&gt; Spring Interview Questions&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-12 lepopup-element-html&#34; data-type=html data-top=256 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:511;top:256px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;span style=&#34;font-weight: bold;&#34;&gt;7.&lt;/span&gt; Android UI Design&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-13 lepopup-element-html&#34; data-type=html data-top=282 data-left=308 data-animation-in=bounceInDown data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:512;top:282px;left:308px;width:473px;height:18px;&gt;&lt;div class=lepopup-element-html-content&gt;and many more ....&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-14&#34; data-type=email data-deps data-id=14 data-top=305 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:513;top:305px;left:308px;width:473px;height:36px;&gt;&lt;div class=lepopup-input&gt;&lt;input type=email name=lepopup-14 class=lepopup-ta-left placeholder=&#34;Enter your e-mail...&#34; autocomplete=email data-default aria-label=&#34;Email Field&#34; oninput=lepopup_input_changed(this); onfocus=lepopup_input_error_hide(this);&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-15&#34; data-type=checkbox data-deps data-id=15 data-top=344 data-left=308 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:514;top:344px;left:308px;width:160px;&gt;&lt;div class=&#34;lepopup-input lepopup-cr-layout-1 lepopup-cr-layout-left&#34;&gt;&lt;div class=&#34;lepopup-cr-container lepopup-cr-container-medium lepopup-cr-container-left&#34;&gt;&lt;div class=lepopup-cr-box&gt;&lt;input class=&#34;lepopup-checkbox lepopup-checkbox-classic lepopup-checkbox-medium&#34; type=checkbox name=lepopup-15[] id=lepopup-checkbox-ps1Zz7JVexWKAOMT-14-0 value=on data-default=off onchange=lepopup_input_changed(this);&gt;&lt;label for=lepopup-checkbox-ps1Zz7JVexWKAOMT-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-cr-label lepopup-ta-left&#34;&gt;&lt;label for=lepopup-checkbox-ps1Zz7JVexWKAOMT-14-0 onclick=lepopup_input_error_hide(this);&gt;&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-16 lepopup-element-html&#34; data-type=html data-top=344 data-left=338 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:515;top:344px;left:338px;width:350px;height:5px;&gt;&lt;div class=lepopup-element-html-content&gt;I agree to the &lt;a href=https://www.javacodegeeks.com/about/terms-of-use target=_blank&gt;Terms&lt;/a&gt; and &lt;a href=https://www.javacodegeeks.com/about/privacy-policy target=_blank&gt;Privacy Policy&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-17&#34; data-type=button data-top=372 data-left=308 data-animation-in=bounceIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:516;top:372px;left:308px;width:85px;height:37px;&gt;&lt;a class=&#34;lepopup-button lepopup-button-zoom-out&#34; href=https://www.javacodegeeks.com/feed/ onclick=&#34;return lepopup_submit(this);&#34; data-label=&#34;Sign up&#34; data-loading=Loading...&gt;&lt;span&gt;Sign up&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-element lepopup-element-19 lepopup-element-html&#34; data-type=html data-top=67 data-left=-15 data-animation-in=fadeIn data-animation-out=fadeOut style=animation-duration:0ms;animation-delay:0ms;z-index:518;top:67px;left:-15px;width:320px;height:363px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;img data-lazyloaded=1 src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png fetchpriority=high decoding=async data-src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;noscript&gt;&lt;img fetchpriority=high decoding=async src=https://www.javacodegeeks.com/wp-content/uploads/2015/01/books_promo.png alt width=320 height=363&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#34;lepopup-form lepopup-form-60 lepopup-form-mQcAmVYanREXcdoq lepopup-form-icon-inside lepopup-form-position-middle-right&#34; data-session=0 data-id=mQcAmVYanREXcdoq data-form-id=60 data-slug=7lQM6oyWL5bTm5lw data-title=&#34;Under the Post Inline&#34; data-page=confirmation data-xd=off data-width=420 data-height=320 data-position=middle-right data-esc=off data-enter=on data-disable-scrollbar=off style=display:none;width:420px;height:320px; onclick=event.stopPropagation();&gt;&lt;div class=lepopup-form-inner style=width:420px;height:320px;&gt;&lt;div class=&#34;lepopup-element lepopup-element-0 lepopup-element-html&#34; data-type=html data-top=80 data-left=70 data-animation-in=bounceInDown data-animation-out=fadeOutUp style=animation-duration:1000ms;animation-delay:0ms;z-index:500;top:80px;left:70px;width:280px;height:160px;&gt;&lt;div class=lepopup-element-html-content&gt;&lt;h4 style=&#34;text-align: center; font-size: 18px; font-weight: bold;&#34;&gt;Thank you!&lt;/h4&gt;&lt;p style=&#34;text-align: center;&#34;&gt;We will contact you soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=hidden id=lepopup-logic-mQcAmVYanREXcdoq value=[]&gt;&lt;/div&gt;&lt;div class=&#34;post-bottom-meta post-bottom-tags post-tags-classic&#34;&gt;&lt;div class=post-bottom-meta-title&gt;&lt;span class=tie-icon-tags aria-hidden=true&gt;&lt;/span&gt;Tags&lt;/div&gt;&lt;span class=tagcloud&gt;&lt;a href=https://www.javacodegeeks.com/tag/data-export rel=tag&gt;Data Export&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/data-recovery rel=tag&gt;Data Recovery&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/database-backup rel=tag&gt;Database Backup&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/database-management rel=tag&gt;Database Management&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/h2 rel=tag&gt;H2&lt;/a&gt; &lt;a href=https://www.javacodegeeks.com/tag/java rel=tag&gt;Java&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=post-extra-info&gt;&lt;div class=theiaStickySidebar&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=clearfix&gt;&lt;/div&gt;</description>
      <author>Omozegie Aziegbe</author>
      <guid>https://www.javacodegeeks.com/a-guide-to-exporting-and-backing-up-h2-databases.html</guid>
      <pubDate>Tue, 28 Apr 2026 15:37:29 +0000</pubDate>
    </item>
  </channel>
</rss>