Supponiamo che la mia applicazione utilizza un sacco di Move
oggetti più e più volte durring un lungo periodo di tempo, in cui Move
è definito come segue:casi riutilizzo delle classi case
sealed trait Player
case object P1 extends Player
case object P2 extends Player
case object P3 extends Player
case object P4 extends Player
sealed trait Key
case object Up extends Key
case object Down extends Key
case object Right extends Key
case object Left extends Key
case object Space extends Key
sealed trait Action
case object Press extends Action
case object Release extends Action
case class Input(key: Key, action: Action)
case class Move(input: Input, player: Player)
Ecco 10 diverse possibili Input
s, e 40 diverso Move
s. C'è un modo per chiedere al compilatore di ottimizzare questi tipi creando tutti i possibili Move
s una volta e riutilizzando le istanze nel tempo?
L'assegnazione di oggetti su un moderno GC generazionale è * estremamente * veloce. Più veloce di 'malloc', ugualmente veloce come lo stack allocation. Anche la raccolta dei rifiuti di piccoli oggetti immutabili di breve durata è estremamente veloce. Con il pooling degli oggetti o il caching, in pratica rompi le ipotesi che rendono GC veloce in primo luogo: prolunghi artificialmente la loro durata (rendendole non più a breve termine), introduci un oggetto gigante ancora più longevo (la cache o il pool stesso) e, in base al tuo caso d'uso, puoi anche rendere gli oggetti mutabili che altrimenti non avrebbero bisogno di essere riutilizzati in uno stato diverso. –
Oppure, per dirla in breve: +1, misura prima, taglia dopo! –