Valhalla: Type-sikkerhet og fart i samme pakkesendelse

Valhalla: Type-sikkerhet og fart i samme pakkesendelse

Mai 19, 2026 java project valhalla value classes domain-driven design performance optimization type safety cloud development

Domain-Driven Type Safety Meets Performance: How Project Valhalla Changes Everything

Hvis du har jobbet med domene-drevet arkitektur i Java, vet du hvor det skår. Du vil lage en PositiveInt som aldri kan være negativ. Kompileren skal avvise ugyldige verdier. Sikkerhet er målet.

Men så kommer den kritiske løkken. En prosessor som håndterer millioner av hendelser, der hver sekvensnummer er en PositiveInt. Da blir de type-sikre wrapper-objektene en ulempe—16 byte overhead per verdi, millioner av heap-allokeringer, cache-problemer. Regelen har vært enkel: valider ved grensen, dropp typene før du treffer ytelseskritisk kode.

Project Valhalla endrer denne regelen.

Det gamle problemet: overhead fra wrappers

En enkel wrapper som PositiveInt som inneholder én int tar 16 byte på HotSpot—12 byte objekt-header pluss 4 byte for selve verdien. Når du putter en million av disse i et array, lagrer arrayet ikke verdiene direkte. Det lagrer referanser. Hver tilgang krever en peker-avreferering, med risiko for cache-miss.

Det blir fort dyrt: wrapperen bruker fire ganger så mye minne som primitiven den beskytter. Tilfeldige tilgangsmønstre forsterker problemet—hver gang du trenger verdien, må du hoppe til en ny minneplassering og forstyrre CPU-cachen.

Dette har skapt en arkitektonisk begrensning. Domenetyper fungerer fint ved API-grenser der du validerer input og etablerer invarianter. Men når data flyter gjennom en hot loop—strømmer, samlinger, numeriske algoritmer—måtte du konvertere tilbake til rå int eller long og miste sikkerheten.

摩擦en var real. Løsningen var ufullstendig.

Value classes: type-sikkerhet uten straff

Project Valhalla er nå tilgjengelig i Java 27 Early Access. Det introduserer value-nøkkelordet. Med regular classes må JVM allokere på heapen og traktere identity. Med value classes er de identity-free. JVMen behandler de som primitives—de kan flatte dem ut i minne hvor de appears: inline in arrays, embedded in object fields, packed in CPU registers.

Så er i dette formatet:

public value class PositiveInt {
    private final int value;

    public PositiveInt(int value) {
        if (value <= 0) {
            throw new IllegalArgumentException("must be positive: " + value);
        }
        this.value = value;
    }

    public int value() { 
        return value; 
        }
}

Syntaxen er almost identisk til en regular class. Constructor kjører. Validering kjører. Typen er garanti: anywhere du ser en PositiveInt, du know verdien er positive.

T<|eos|>

Read in other languages:

RU BG EL CS UZ TR SV FI RO PT PL NL HU IT FR ES DE DA ZH-HANS EN