Как Project Valhalla ще промени играта с type safety и performance

Как Project Valhalla ще промени играта с type safety и performance

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

Как Project Valhalla прави type safety достъпна и без компромис с производителността

Ако сте работили с domain-driven дизайн в Java, вероятно сте се сблъсквали с този проблем. Искате да създадете PositiveInt, който да гарантира, че стойността никога няма да бъде отрицателна. Компилаторът да отхвърля невалидни състояния. Но когато стигнете до критичните пътища в кода, wrapper обектите се превръщат в пречка.

Защо wrapper класовете струват скъпо

Прост wrapper като PositiveInt заема 16 байта в паметта на HotSpot. Когато поставите милион такива обекти в масив, той не съхранява стойностите директно. Вместо това държи референции, които водят до допълнителни обекти в heap-а. Всяко достъпване изисква pointer dereference и увеличава риска от cache miss.

Резултатът е очевиден — wrapper-ът консумира четири пъти повече памет от примитивния тип, който защитава. Това принуждава разработчиците да валидират данните само на входа и да преминават към raw int или long във вътрешните цикли. Това е практическото правило от години.

Какво променя Project Valhalla

Java 27 Early Access въвежда value keyword. Value класовете нямат identity и JVM може да ги третира като примитиви. Те могат да бъдат вградени директно в масиви, полета на обекти или CPU регистри — без object header и без индирекция.

Създаването на PositiveInt изглежда почти същото:

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; 
    }
}

Валидацията остава, но JVM е свободен да вмъкне четирибайтовото int директно в структурата на паметта.

Read in other languages:

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