2017-06-30 1 views
1

Dans la documentation de GetPrimitiveArrayCritical, il est indiqué qu'il peut parfois copier le tableau. La documentation IBM pour leur JDK indique qu'il ne sera probablement pas le copier si la taille du tableau est inférieure à 1/1000 de la taille du tas. J'ai regardé le code de la fonction dans OpenJDK 8 et il semble qu'il ne le copie jamais mais il ne fait que mettre l'isCopy à false. J'ai vérifié que dans le fichier http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/872e9c4548bf/src/share/vm/prims/jni.cpp à la ligne 4250. Cela signifie-t-il que si j'utilise openJDK, je n'aurai pas de problème avec la copie de la mémoire par la JVM?GetPrimitiveArrayCritical OpenJDK hotspot ne copie-t-il jamais?

P.S. Je me fiche de savoir si mon code fonctionne sur n'importe quelle autre machine JVM.

Répondre

1

J'ai revérifié les sources OpenJDK 8, et oui, il semble que GetPrimtiveArrayCritical ne fasse jamais de copie. Cela ne dépend même pas de l'algorithme de récupération de place. Le code dans OpenJDK 9 est similaire. Que ce soit une bonne idée de s'appuyer sur ceci est une autre question tout à fait. La méthode similaire GetStringCritical a commencé à effectuer des copies dans OpenJDK 9 dans de nombreux cas (à savoir, lorsqu'un tableau d'octets est utilisé comme tableau de sauvegarde pour la chaîne).

+0

Merci, juste besoin de quelqu'un pour le confirmer. Je suis sur le point d'en abuser beaucoup :) –