Valhalla: Πώς η Ασφάλεια Τύπων Συναντά την Ταχύτητα σε Κλίμακα
Η Ασφάλεια Τύπου Συναντά την Ταχύτητα: Τι Αλλάζει το Project Valhalla
Στη Java, όταν σχεδιάζετε αρχιτεκτονική βασισμένη σε domain, συχνά χρειάζεται να δημιουργήσετε τύπους που προστατεύουν από λάθη. Ένα παράδειγμα είναι ένας τύπος που εγγυάται ότι μια τιμή θα είναι πάντα θετική. Το ιδανικό θα ήταν η ασφάλεια αυτή να ισχύει παντού, ακόμα και σε σημεία που απαιτούν υψηλή απόδοση.
Στην πράξη όμως, οι wrapper τύποι φέρνουν μαζί τους κόστος μνήμης και πολλές allocations. Αυτό κάνει τους προγραμματιστές να τους χρησιμοποιούν μόνο στα όρια του συστήματος και να τους εγκαταλείπουν όταν φτάνουν σε κρίσιμες διαδρομές κώδικα. Το Project Valhalla έρχεται να αλλάξει αυτή τη συνήθεια.
Το Πρόβλημα με το Overhead των Wrappers
Ένας απλός wrapper που περιέχει μόνο ένα int χρειάζεται περίπου 16 bytes μνήμης. Όταν τον βάζετε σε array, δεν αποθηκεύεται η τιμή απευθείας. Αποθηκεύεται μια αναφορά σε αντικείμενο heap, που σημαίνει περισσότερα pointers και μεγαλύτερη πιθανότητα cache misses.
Το αποτέλεσμα είναι ότι ένας τέτοιος wrapper καταναλώνει τέσσερα φορές περισσότερη μνήμη από το primitive που προστατεύει. Και όταν η πρόσβαση είναι συχνή, κάθε αναφορά προσθέτει καθυστέρηση. Η αρχιτεκτονική αναγκάζεται να θυσιάζει είτε την ασφάλεια είτε την απόδοση.
Τι Φέρνει το Project Valhalla
Με το Java 27 Early Access, το Project Valhalla εισάγει το keyword value. Οι value classes δεν έχουν identity και δεν απαιτουν ξεχωριστό allocation στο heap. Το JVM μπορεί να τους αποθηκεύει flat, είτε σε arrays είτε μέσα σε άλλα αντικείμενα, ακόμα και σε registers.
Αυτό με<|eos|>