Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    I

    Inside Java

    inside.java · Company blog · on HN since 2020

    The Java team at Oracle writes about OpenJDK developments such as virtual threads, value classes, Valhalla, and data-oriented programming.

    Visit blogHN submissions
    ProgrammingLanguages & Compilers
    What HN says

    Commenters recommend it, including its podcast, as an official source from the Java developers, and cite it for talks and posts on Valhalla and Loom.

    Stats for nerds
    66HN people shared it
    79linked in comments
    1.2Kstory points
    Jul 2026last shared
    2021people per year2026

    Top posts on HN

    1. 1
      Strings Just Got Faster
      1 person · 246 points · first shared 2025 · 181 comments on HN
    2. 2
      Mark–Scavenge: Waiting for Trash to Take Itself Out
      2 people · 168 points · first shared 2024 · 47 comments on HN
    3. 3
      On the Performance of User-Mode Threads and Coroutines
      1 person · 147 points · first shared 2020 · 62 comments on HN
    4. 4
      What Java Modules Are About
      1 person · 124 points · first shared 2021 · 91 comments on HN
    5. 5
      All New Java Language Features Since Java 21
      1 person · 76 points · first shared 2025 · 125 comments on HN
    6. 6
      Project Wayfield – The JDK Wayland Desktop on Linux [video]
      1 person · 70 points · first shared 2024 · 33 comments on HN
    7. 7
      Networking I/O with Virtual Threads – Under the hood
      4 people · 69 points · first shared 2021 · 48 comments on HN
    8. 8
      Compact forwarding information for the Z Garbage Collector in the OpenJDK
      3 people · 63 points · first shared 2020 · 8 comments on HN
    9. 9
      A Deep Dive into JVM Start Up
      1 person · 34 points · first shared 2025 · 2 comments on HN
    10. 10
      Valhalla – Java's Epic Refactor
      3 people · 29 points · first shared 2024 · 1 comments on HN

    What HN people wrote when they linked it

    • davidalayachewJan 2024

      > Most of Java problems come down to unfortunate design choices in the past. E.g. checked exceptions vs lambdas

      Funnily enough, your example has actually supported my point.

      They just released a proposal that effectively side-steps the problem of checked-exceptions-in-lambdas. Here is a link -- https://inside.java/2023/12/15/switch-case-effect/

      This is still just a proposal, so nothing is hammered out. And we can talk about the merits of this solution. But my point is, by focusing on designing features the way they have, you can minimize intrusion while maximizing the value provided. I think this proposal demonstrates that extremely well.

      This proposal allows the developer to maintain all the good parts about checked exceptions and lambdas, while being able to side-step the major downside.

      > Don't think like Java is a good example of that, more like the anti-example. Plenty of more sophisticated languages move way faster without negative effects on long term progress (C#, Kotlin, to some extent Scala)

      To be clear, when I say long term, I am measuring on the scale of decades. In that respect, I actually don't think your statement is correct.

      To give an example with Kotlin, someone (I think Brian) talked about Kotlin's release strategy for features being great for short term, but costly in the long term. Kotlin had record-esque classes long before Java ever got theirs, but now that Java finally has theirs, Kotlin is using an annotation to disambiguate between Java style…

    • still_grokkingNov 2022

      Java had an extremely advanced and strict sandbox for many years.

      It offered of course also the possibility to blacklist everything by default.

      The problem with such a granular sandbox is that it's too complex for most use cases.

      When you need to whitelist any and every call to the outside world this becomes very tedious.

      That's why Java now removes the sandbox…

      https://inside.java/2021/04/23/security-and-sandboxing-post-securitymanager/

      Let's see how this works out for WASM.

      I guess: Without resorting to using some language(s) with build-in support for capability security a whitelist based sandbox approach won't ever work without issues.

      First of all you can forget about C/C++. Everything in this languages assumes free access to the system.

      Rust does not have any support for capabilities either (yet, and for the years to come at least).

      The best current WASM sandbox implementation, which is in WasmTime not Wasmer, is not more than a FS block. (And the memory safety guaranties you get in any VM language, of course).

      https://docs.wasmtime.dev/security.html

      I don't find any such feature mentioned in the Wasmer docs. It seems completely without any sandbox! (To stress it once more: All VM languages are memory safe. That's not sandboxing. All the "sandboxed by default" claims are misleading, at least).

      https://github.com/wasmerio/wasmer/issues/221

      That even people here on HN believe in the currently unfulfilled WASM security promises shows only how good the WASM…

    • pronOct 2025

      They wouldn't have had better performance, though. There is no significant performance penalty we're paying, although there's a nuance here that may be worth pointing out.

      There are two different usecases for coroutines that may tempt implementors to address with a single implementation, but the usecases are sufficiently different to separate into two different implementations. One is the generator use case. What makes it special is that there are exactly two communicating parties, and both of their state may fit in the CPU cache. The other use case is general concurrency, primarily for IO. In that situation, a scheduler juggles a large number of user-mode threads, and because of that, there is likely a cache miss on every context switch, no matter how efficient it is. However, in the second case, almost all of the performance is due to Little's law rather than context switch time (see my explanation here: https://inside.java/2020/08/07/loom-performance/).

      That means that a "stackful" implementation of user-mode threads can have no significant performance penalty for the second use case (which, BTW, I think has much more value than the first), even though a more performant implementation is possible for the first use case. In Java we decided to tackle the second use case with virtual threads, and so far we've not offered something for the first (for which the demand is significantly lower).

      What happens in languages that choose to tackle both use cases with the same…

    • marwisJan 2024

      > They just released a proposal that effectively side-steps the problem of checked-exceptions-in-lambdas. Here is a link -- https://inside.java/2023/12/15/switch-case-effect/

      This is fine but removes only about 10% of the pain of mandatory exception handling inside typical lambda.

      Nothing short of making exceptions transparent to lambda receivers will cut it for me.

      > Kotlin is using an annotation to disambiguate between Java style records and Kotlin style records

      This is inherent risk of building on top of something you don't control. Don't really see this as fair comparison. It's a known design constraint. The only way to avoid it is to not build on top of Java or not adding any features on top of Java.

      > To give another example with C#, there has been a lot of recent discussion about finding potential alternatives to their async-await concurrency model. They cite the level of effort it takes to maintain the async await style code and the costs that come from this.

      I had a very different take-away. They did PoC with virtual threads and decided it's not worth the switch now and async-await that they have is good enough.

      https://github.com/dotnet/runtimelab/issues/2398

      > Some of the languages it gets compared too aren't even that old yet.

      C# is more than old enough to drink and Scala just had its 20th birthday this weekend :) Java is only 4 years older than C#.

    • uDontKnowMeJul 2021

      I like:

      Defn: https://podtail.com/en/podcast/defn/

      The REPL: https://www.therepl.net/episodes/ (Seems to have gone quiet)

      ClojureScript Podcast: https://clojurescriptpodcast.com/

      Functional Design in Clojure: https://clojuredesign.club/ (Also seems to have gone quiet since December)

      LispCast by Eric Normand: https://lispcast.com/

      Cognitect, the company behind Clojure also has their own podcast but I haven't found it to be that interesting most of the time, at least yet: https://www.cognitect.com/cognicast/index.html

      Not specifically Clojure-related but has discussed a few times including wit Rich Hickey (as well as other unrelated great conversations!): CaSe https://www.case-podcast.org/

      Completely not at all about Clojure but great software podcasts:

      Go Time: Even though I hardly ever write Go, I find their conversations to be really great and having lessons beyond Go. It helps that I am interested in the language though: https://changelog.com/gotime

      Web Development and Development in general - The Bike Shed: https://www.bikeshed.fm/

      Software Engineering Radio: https://www.se-radio.net/

      CoRecursive: https://corecursive.com/

      Inside Java: https://inside.java/

    • cogman10Mar 2026

      > If that were true then they wouldn't be heap allocations.

      "Heap" is a misnomer. It's not called that due to the classic CS "heap" datastructure. It's called that for the same reason it's called a heap allocation in C++. Modern C++ allocators don't use a heap structure either.

      How the JVM does allocations for all it's collectors is in fact a bump allocator in the heap space. There are some weedsy details (for example, threads in the JVM have their own heap space for doing allocation to avoid contention in allocation) but suffice it to say it ultimately translates into a region check then pointer bump. This is why the JVM is so fast at allocation, much faster than C++ can be. [1] [2]

      > I don't know what this means.

      JVM allocations are typically pointer bumps, adding a number to a register. There's really nothing faster than it. If you are implementing an arena then you've already lost in terms of performance.

      [1] https://www.datadoghq.com/blog/understanding-java-gc/#memory-compaction

      [2] https://inside.java/2020/06/25/compact-forwarding/

    Related

    Brian Goetzcr.openjdk.java.net/~briangoetz53 people

    Pattern Matching for Java

    Brian Goetz
    Personal · last shared 2022
    Aleksey Shipilëvshipilev.net112 people

    JVM Anatomy Quarks

    Aleksey Shipilëv
    Personal · last shared 2026
    Oracle Blogsblogs.oracle.com651 people

    “Stop reverse engineering our code”

    Oracle Blogs
    Company · last shared 2026
    Ron Presslercr.openjdk.java.net/~rpressler40 people

    State of Loom

    Ron Pressler
    Personal · last shared 2022
    Mark Reinholdmreinhold.org21 people

    Project Jigsaw: Complete

    Mark Reinhold
    Personal · last shared 2022
    GraalVM Blogmedium.com/graalvm58 people

    Writing memory safe JIT compilers

    GraalVM Blog
    Company · last shared 2026
    codecentric Blogblog.codecentric.de70 people

    String Deduplication – A new feature in Java 8 Update 20

    codecentric Blog
    Company · last shared 2023
    SoftwareMill Blogsoftwaremill.com55 people

    Hiring Developers in a Remote and Distributed Company

    SoftwareMill Blog
    Company · last shared 2026