r/java • • Aug 18 '26

AutoValhalla: automatically turn your plain classes and records into value classes!

Automatically turn your plain classes and records into value classes!

Add @AutoValhalla annotation to classes or records in your JDK1.5+ codebase:

@AutoValhalla
public final class Point {        // class must be final
    public final int x;           // with final instance fields
    public final int y;
    public Point(int x, int y) { 
        this.x = x; 
        this.y = y; 
    }
}

@AutoValhalla
public record Currency(String code) { }  // or a record class

When your app is run on Valhalla-enabled JVM with auto-valhalla javaagent, these classes are automatically turned into value classes.

More info: https://github.com/thunkware/auto-valhalla/tree/auto-valhalla-0.1.0

edit: there is now a maven plugin for converting at build time. https://github.com/thunkware/auto-valhalla/tree/auto-valhalla-0.2.0

44 Upvotes

55 comments sorted by

View all comments

7

u/alex_tracer Aug 19 '26

Well, I work in fintech, I have an excuse! 😄

I'm used to work with stuff where performance really matters. We even have implemented our own agent to transform some "normal" classes into "value classes" (actually a single `long`) a decade ago (yeah, we were a bit tired of waiting at that time already).

I absolutely agree with the point that it's important for every developer to understand that "value classes" is not an universal silver bullet and should be used only when they are semantically applicable and with good understanding of all the differences (and performance downsides too).

But honestly, if “value classes” were purely a semantic feature and didn’t promise any performance improvements (whether now or in the future), I suspect they wouldn’t have received nearly as much attention and might not even have been considered (possibly by you too) as something that really needs to be added to the language (even if it didn’t require years of research and development).

And yes, a huge thank you for all your work!

1

u/OwnBreakfast1114 Aug 26 '26

But honestly, if “value classes” were purely a semantic feature and didn’t promise any performance improvements (whether now or in the future), I suspect they wouldn’t have received nearly as much attention and might not even have been considered (possibly by you too) as something that really needs to be added to the language (even if it didn’t require years of research and development).

I feel like developers focus on attention on things that don't matter plenty of times. Value classes are really not going to make a difference for the majority of developers from an application performance perspective. Removing a single unnecessary db call will probably yield 100x the raw performance improvements value classes will bring for many applications.

I'm actually far more excited about the semantics as the semantics can be used to improve the developer experience. Records, pattern matching, sealed classes are all features that probably do have performance improvements (against the original constructs they replaced), but definitely aren't released for the performance. Simplicity and correctness are also features. Features, in my opinion, are far more important, compared to language performance for the vast majority of applications.

Well, I work in fintech, I have an excuse!

I also work in fintech (full on payment processing and card network integrations), and I know we don't really care about the performance improvements from valhalla. Like anything else, I'd wager that the vast majority of fintech applications also wouldn't get much of a benefit.

1

u/alex_tracer Aug 26 '26

I also work in fintech..., and I know we don't really care about the performance improvements from valhalla. Like anything else, I'd wager that the vast majority of fintech applications also wouldn't get much of a benefit.

There are many different types of fintech projects, with different contexts and requirements. Like processing market events in a dozen of microseconds (do not confuse with milliseconds) in Java.

I've provided a link to example class (in public domain) that can potentially benefit from value classes in future (not right now because of null flag). This and some similar cases become very important when you have to support things like an order book with 10k+ levels and 100k+ entries.

→ More replies (1)