Βασικές αλλαγές:
- Μια κρυφή μνήμη έχει προστεθεί στις κλήσεις μεθόδων για να αποφευχθεί η ανάλυση υπερφόρτωσης, η οποία μειώνει σημαντικά τον αντίκτυπο στην απόδοση της ανάλυσης μεθόδου, ειδικά εάν η ίδια υπερφόρτωση καλείται πολλές φορές, όπως κατά την εκτέλεση βρόχου.
- Από 4 έως 100 φορές, ανάλογα με τον τύπο δεδομένων, επιταχύνεται η μεταφορά λιστών, πλειάδων και buffers σε συστοιχίες Java primitives. Η μετατροπή χρησιμοποιεί βελτιστοποιημένη επεξεργασία των buffer στη μνήμη, αντί για το Sequence API. Όταν συναντάται ένα buffer Python, μόνο το πρώτο στοιχείο ελέγχεται για μετατροπή, καθώς αυτά τα buffer είναι ομοιογενή.
- Επεξεργασία λειτουργιών τερματισμού λειτουργίας (εφαρμόστηκε στο JPype 1.0.0, αλλά παραλείφθηκε κατά την προετοιμασία του αρχείου καταγραφής αλλαγών). Το JPype καλεί τώρα τη ρουτίνα τερματισμού λειτουργίας JVM, η οποία επιχειρεί να βγει με χάρη. Αυτό οδηγεί σε αρκετές αλλαγές στη συμπεριφορά. Τα νήματα χωρίς παρασκήνιο (κλήσεις διακομιστή μεσολάβησης) μπορούν πλέον να διατηρήσουν το JVM ανοιχτό μέχρι να ολοκληρωθούν. Οι κλήσεις διακομιστή μεσολάβησης θα επεξεργαστούν τον τερματισμό λειτουργίας μέχρι να ολοκληρωθεί η κλήση, αλλά θα λάβουν ένα μήνυμα ματαίωσης. Τα αρχεία έχουν πλέον κλείσει σωστά και ξεπλένονται στο δίσκο, εάν τα νήματα χειρίζονται την εξαίρεση όπως αναμένεται. Εκτελούνται τα άγκιστρα εκκαθάρισης πόρων και οι οριστικοποιητές. Όταν δημιουργούνται νήματα, καλούνται τα άγκιστρα AtExit. Μέσω του δαίμονα, υλοποιείται η αυτόματη προσάρτηση νήματος κατά τη χρήση του JVM από την Python. Ο κώδικας σφαλμάτων που δεν μπορεί να χειριστεί σωστά την εκκαθάριση νήματος πιθανότατα θα κολλήσει όταν εκτελεστεί ο τερματισμός λειτουργίας. Πρόσθετη τεκμηρίωση μπορείτε να βρείτε στο εγχειρίδιο χρήσης.
- Το wrapper για το Throwable έλαβε ένα περιτύλιγμα για το Object αντί για το αναμενόμενο αποτέλεσμα, το οποίο οδήγησε σε περίεργες μετατροπές από τις τάξεις Python.
- Διορθώθηκαν τυπογραφικά λάθη στο σύστημα εισαγωγής που είχαν ως αποτέλεσμα το σφάλμα '»jname» δεν βρέθηκε'.
- Διασφαλίστηκε ότι το "^C" προωθήθηκε σωστά στο KeyboardInterrupt.
- Διορθώθηκε το πρόβλημα με τα σύμβολα από την Python 3.5.3. Το PySlice_Unpack εισήχθη σε μια επόμενη έκδοση ενημερωμένης έκδοσης κώδικα (3.5.4) και δεν έπρεπε να είχε χρησιμοποιηθεί.
- Διορθώθηκε ένα σφάλμα με το numpy.linalg.inv που οδήγησε σε συντριβή. Το ζήτημα έχει εντοπιστεί στην επικοινωνία νημάτων μεταξύ του JVM και ορισμένων άχρηστων γεύσεων. Η προτεινόμενη λύση είναι να καλέσετε το numpy.linalg.inv πριν ξεκινήσετε το JVM.
Πηγή: opennet.ru