Ну, escape-анализ должен означать, что самые последние JVM на самом деле не должны создавать вашу обогащенную оболочку , чтобы вызвать метод addMonth
,
Степень, в которой это действительно происходит на практике , очевидно, будет зависеть от того, сколько времени выполнения hotspot JVM решает, что эти методы добавляются при создании объекта.Когда анализ побега не происходит, очевидно, что JVM придется «поместить» (как вы говорите) Long
в новый экземпляр класса-оболочки.Он не включает в себя «создание класса» - это будет включать «создание экземпляра класса».Этот экземпляр, будучи недолговечным, сразу же будет GC-d, поэтому накладные расходы (хотя и небольшие):
- выделение памяти для экземпляра
- GC-просмотр экземпляра
Это, очевидно, будет проблемой любого рода, если вы определенно пишете код с очень низкой задержкой, в котором вы пытаетесь свести к минимуму создание мусора (в узком цикле).Только вы знаете, так ли это.
Что касается того, будет ли подход работать для вас (и вам поможет анализ побега), вам придется тестировать в дикой природе.Микро-тесты, как известно, трудно написать для такого рода вещей.
Причина, по которой мне не нравятся эти псевдонимы типов , являющиеся частью общедоступного API , заключается в том, что scala делаетне навязывай их так строго, как хотелось бы.Например:
type PrimitiveDate = Long
type PrimitiveSpeed = Long
type Car = String
type Meeting = String
var maxSpeeds : Map[Car, PrimitiveSpeed] = Map.empty
//OOPS - much too easy to accidentally send the wrong type
def setDate(meeting : Meeting, date : PrimitiveDate) = maxSpeeds += (meeting -> date)