Les principaux changements:
- Un cache a été ajouté aux appels de méthode pour éviter la résolution de surcharge, ce qui réduit considérablement l'impact sur les performances de la résolution de méthode, en particulier si la même surcharge est appelée plusieurs fois, comme lors de l'exécution d'une boucle.
- De 4 à 100 fois, selon le type de données, le transfert des listes, tuples et tampons vers des tableaux de primitives Java est accéléré. La conversion utilise un traitement optimisé des tampons en mémoire, au lieu de l'API Sequence. Lorsqu'un tampon Python est rencontré, seul le premier élément est vérifié pour la conversion, car ces tampons sont homogènes.
- Traitement des opérations d'arrêt (implémentées dans JPype 1.0.0, mais ignorées lors de la préparation du journal des modifications). JPype appelle désormais la routine d'arrêt de la JVM, qui tente de se terminer correctement. Cela entraîne plusieurs changements de comportement. Les threads hors arrière-plan (appels proxy) peuvent désormais garder la JVM ouverte jusqu'à ce qu'ils soient terminés. Les appels proxy procéderont à l'arrêt jusqu'à la fin de l'appel, mais recevront un message d'abandon. Les fichiers sont désormais fermés correctement et vidés sur le disque si les threads gèrent l'exception comme prévu. Les hooks et finaliseurs de nettoyage des ressources sont exécutés. Lorsque les threads sont générés, les hooks AtExit sont appelés. Grâce au démon, l'attachement automatique des threads est implémenté lors de l'utilisation de la JVM de Python. Le code bogué qui ne peut pas gérer correctement le nettoyage des threads se bloquera probablement lors de l'exécution de l'arrêt. Une documentation supplémentaire peut être trouvée dans le manuel d'utilisation.
- Le wrapper pour Throwable a reçu un wrapper pour Object au lieu du résultat attendu, ce qui a conduit à d'étranges conversions des classes Python.
- Correction de fautes de frappe dans le système d'importation qui entraînaient l'erreur « »jname » introuvable ».
- Nous nous sommes assurés que "^C" était correctement promu dans KeyboardInterrupt.
- Correction d'un problème avec les symboles depuis Python 3.5.3. PySlice_Unpack a été introduit dans une version ultérieure du correctif (3.5.4) et n'aurait pas dû être utilisé.
- Correction d'un bug avec numpy.linalg.inv qui entraînait un crash. Le problème a été attribué à la communication des threads entre la JVM et certaines versions de numpy. La solution proposée consiste à appeler numpy.linalg.inv avant de démarrer la JVM.
Source: opennet.ru