Προγραμματισμός

Κατανόηση του sun.misc.Usafe

Την περασμένη εβδομάδα, οι ειδήσεις έσπασαν ότι ορισμένοι προγραμματιστές είναι έτοιμοι, ισχυριζόμενοι ότι η Oracle προτείνει την κατάργηση sun.misc.Usafe στην Java 9 θα καταστρέψει το οικοσύστημα Java. Για πολλούς προγραμματιστές που δεν έχουν εμπλακεί σε προγραμματισμό χαμηλού επιπέδου, ωστόσο, το ιδιωτικό API πιθανότατα καλύπτεται από μυστήριο. Τι είναι αυτό το API τόσο επικίνδυνο που είναι το ίδιο το όνομά του επισφαλής?

Ο συνεργάτης του Blogger και του ανοιχτού κώδικα Rafael Winterhalter εξηγεί στην ενότητα "Κατανόηση του sun.misc.Unsafe" ότι συχνά απαιτείται μη ασφαλής κωδικός για προγραμματισμό χαμηλού επιπέδου, όπου οι προγραμματιστές τροποποιούν τη λειτουργικότητα της πλατφόρμας για έναν συγκεκριμένο σκοπό. Ενώ το JNI (Java Native Interface) θεωρείται η ασφαλέστερη επιλογή για προγραμματισμό Java χαμηλού επιπέδου, έχουν χρησιμοποιηθεί πολλά έργα ανοιχτού κώδικα Επισφαλής ως λιγότερο περιορισμένη λύση.

Ο Winterhalter παρουσιάζει ένα από τα πολλά παραδείγματα που χρησιμοποιούν Επισφαλής για να ξεπεραστεί ένα εμπόδιο προγραμματισμού Java:

Την πρώτη φορά που χρησιμοποίησα το Επισφαλής Το class ήταν για τη δημιουργία μιας παρουσίας μιας κλάσης χωρίς να καλέσετε κανέναν από τους κατασκευαστές της τάξης. Χρειαζόμουν να πληρώσω μια ολόκληρη τάξη που είχε μόνο έναν μάλλον θορυβώδη κατασκευαστή, αλλά ήθελα μόνο να αναθέσω όλες τις επίκληση μεθόδου σε μια πραγματική παρουσία [...] Η δημιουργία μιας υποκατηγορίας ήταν εύκολη και αν η τάξη είχε εκπροσωπηθεί από μια διεπαφή, δημιουργώντας ένα πληρεξούσιος θα ήταν ένα απλό καθήκον. Με τον ακριβό κατασκευαστή, έμεινα όμως κολλημένος. Χρησιμοποιώντας το Επισφαλής τάξη, ωστόσο ήμουν σε θέση να δουλέψω.

Ανατρέξτε στην ενότητα "Κατανόηση sun.misc.Unsafe" και "Java magic, Μέρος 4: sun.misc.Unsafe" για επιπλέον παραδείγματα που καταδεικνύουν το γιατί και τον τρόπο χρήσης Επισφαλής σε προγράμματα Java.

Αυτή η ιστορία, "Understanding sun.misc.Unsafe" δημοσιεύθηκε αρχικά από την JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found