Est-ce que cela a du sens en termes de meilleures performances pour construire un cache de type LRU en C/C++ et obtenir Java pour y accéder via JNI?Cache dans C accédé via JNI
Répondre
Douteux
JVMs faire le travail tout à fait décent ces jours-ci, d'autant plus que toutes les applications qui ont besoin d'un cache probablement rester assez longtemps pour que la machine virtuelle Java pour optimiser un peu. Quel que soit votre code de cache gagnerait en vitesse en évitant la JVM, vous perdriez probablement pousser des objets dans JNI. Sans oublier les difficultés inhérentes au développement, à la maintenance et au déploiement du code C++ par rapport à Java. Ou les dangers de réinventer la roue en déployant votre propre cache - il doit y avoir quelque chose que vous pourriez utiliser au lieu de déployer le vôtre.
Tandis que tout le monde répondait exactement à ce que je cherchais, vous avez eu le plus de votes. Donc, je vais vous donner la réponse :) et upvote tout le monde aussi. Merci tout le monde. –
Le compilateur JIT est assez rapide. Il rivalise avec le code compilé.
Votre meilleur pari est de l'implémenter dans tout ce qui est le plus facile à développer, puis de le profiler pour identifier les problèmes de performance. Ensuite, voyez ce que vous pouvez faire à partir de là.
Improbable.
Le cache fonctionne avec les objets dans le tas. L'allocation et la désallocation de mémoire en tas dans C++ ne sont pas meilleures que celles de Java. En fait, dans un test de courte durée, le cache Java gagnerait probablement en raison du GC reporté (le C++ doit libérer la mémoire explicitement et immédiatement).
D'autres opérations (put, find) devraient être à égalité avec C++ en raison de JIT (ce sont des points chauds, et seront bientôt compilés en code natif). Remarque: comme toujours avec performance, la réponse définitive ne peut être obtenue que par des tests.
Même dans un test de longue durée, la gestion de la mémoire de Java est généralement plus performante en C en raison de la fragmentation de ce dernier. –
Vous n'allez probablement pas optimiser la bonne chose ici. L'implémentation du cache est rarement ce qui nécessite une optimisation dans un grand système. Il y a beaucoup d'implémentations bonnes et rapides pour Java. Il y a peu de chances que vous obteniez beaucoup de rien d'une implémentation native. Et même si vous le pouvez, êtes-vous sûr que vous avez vraiment besoin de cela?
C'est généralement tout ce que vous faites autour du cache que fait réellement. Requêtes de base de données, opérations de blocage et tâches gourmandes en ressources processeur. Vous devez certainement profiler votre application et optimiser uniquement les zones qui en ont besoin. Si vous optimisez quelque chose qui ne prend que 5% du temps total, alors vous n'obtiendrez qu'une amélioration de 5% au mieux (c'est-à-dire si vous l'avez fait infiniment vite).
J'ai traité avec de grands systèmes avec de grands caches et la surcharge de l'implémentation de cache est vraiment faible, des pourcentages à un chiffre au maximum. Vous devriez vous assurer que vous passez votre temps sur la bonne chose. Je ne dis pas que vous n'en auriez pas besoin, je dis juste que c'est douteux et vous devriez vérifier d'abord. Vous n'avez pas indiqué d'un côté ou de l'autre, donc je suppose que vous n'avez pas de problème connu avec une implémentation de cache existante.
- 1. comment passer des caractères ASCII étendus via JNI via C++
- 2. Stocker un pthread_t dans java via jni
- 3. Android - JNI - Récupération de membres MyException via JNI
- 4. passage des pointeurs entre C et Java via JNI
- 5. Code Java de débogage appelé via JNI
- 6. JNI Java en C++
- 7. C# socket asynchrone accédé par plusieurs threads
- 8. Rappel dans une application native depuis Java, via JNI
- 9. Environnement de cache JNI dans une application multithread
- 10. ActiveX ne s'enregistre pas automatiquement lorsqu'il est accédé via IE6
- 11. Java JNI fuite dans le processus C++
- 12. Android appel démon natif de méthode Java via JNI
- 13. Instances d'objets JNI et C++
- 14. Appel d'un rappel C++ à partir de Java invoqué à partir de l'application C++ via JNI
- 15. post redirigé URL accédé par le message de l'objectif-c
- 16. Est-il possible d'imprimer une sortie console C-code via JNI dans une application android?
- 17. Où est stocké/accédé HttpContext.Current.User.Identity.Name?
- 18. Firefox cache dans C#
- 19. FFMpeg jni dans Android?
- 20. Mise en cache des ID de la méthode Java JNI
- 21. Sources JNI dans l'APK
- 22. Accès aux fonctionnalités de la DLL JNI via ColdFusion
- 23. Appel via la ligne de commande par rapport à JNI
- 24. Appel JNI C++ vers Java qui appelle JNI vers une DLL C++ différente
- 25. L'application Java appelle la DLL C++ via JNI; comment mieux allouer de la mémoire?
- 26. SIGSEGV lors de l'accès à l'analyseur de liaison via JNI
- 27. Exécuter le code natif via JNI/DLL ou EXE?
- 28. Méthode d'appel via JNI avec le paramètre char []
- 29. Appel d'une DLL à partir d'une applet via JNI
- 30. HttpContext.Current accédé dans les classes statiques
Cela dépend entièrement de ce que vous mettez en cache. Mettre en œuvre, profiler, observer. –