Est-il possible de dire à la JVM d'indiquer au système d'exploitation qu'un objet ne devrait pas être déplacé de préférence pour échanger de l'espace?Dire à Java de ne pas pousser un objet dans l'espace de swap
Répondre
La réponse courte est non. Java ne vous permet aucun contrôle sur ce qui est permuté et sur ce qui est «épinglé» dans la mémoire vive (RAM).
S'inquiéter de ce genre de chose est généralement un signe qu'il y a quelque chose d'autre qui ne va pas dans votre projet. Dans l'ensemble, le système d'exploitation fera un bien meilleur travail pour déterminer ce qui devrait être échangé et ce qui ne devrait pas l'être. Votre travail consiste à écrire votre logiciel de manière à ce qu'il n'essaie pas de deviner ce que VM/OS sous-jacent va faire, concentrez-vous simplement sur la livraison de vos fonctionnalités et un bon design.
Hey! Vous programmez dans un langage géré. Pourquoi y pensez-vous? Si vous ne pouvez pas sortir ces choses de votre esprit, vous pouvez toujours choisir de programmer en C.
La réponse courte est (comme indiqué ci-dessus): Ne pas le faire :-).
Il serait cependant possible en principe. La plupart des systèmes d'exploitation permettent de "verrouiller" certaines zones de mémoire d'être permutées (par exemple mlock(2) sous Linux, VirtualLock sous Windows).
La machine virtuelle pourrait exposer cette fonctionnalité aux applications Java via une API appropriée. Cependant, aucune MV que je connaisse ne le fait, donc pour cela, vous devez d'abord modifier votre VM ...
Si vous y accédez régulièrement, quelle que soit la page à laquelle il se trouve à ce moment-là (la JVM déplace des trucs pendant le ramassage des ordures) ne sera pas paginé à moins que quelque chose d'autre ne demande plus de mémoire agressive. Mais il n'y a aucun moyen de dire à la JVM de ne pas la déplacer vers une autre page, et le système d'exploitation ne connaît que les pages.
Ce problème a également été très perceptible dans Eclipse et le plugin dirty hack KeepResident (http://suif.stanford.edu/pub/keepresident/) l'évite.
C'est peut-être un bon point de départ? Je ne l'ai pas vu en usage répandu donc peut-être cela a été intégré dans la distribution standard Eclipse?
Pas une réponse, mais il manque les points à commenter, je réserve cette option :)
Il y a des raisons de ne pas stocker des informations en échange. Que ce soit des mots de passe ou d'autres informations confidentielles qui ne devraient pas passer l'éternité sur le disque. Aussi, revenant après un week-end sur mon pc, j'aimerais que certaines choses soient en mémoire immédiatement disponibles. (Non Java) Nativement, il y a probablement un moyen de le faire pour chaque système d'exploitation/la plupart des systèmes d'exploitation. Avec les fenêtres, c'est vraiment possible. Mais pas directement hors de Java (pensez JNI). Selon le degré de désespoir de cette option, vous pouvez toujours utiliser la mémoire vidéo ou tout autre périphérique matériel qui ne s'interchange pas. Cela vous permet d'utiliser une API Java standard, comme jogl pour stocker des informations. Mais je doute que ce soit dans le contexte de la mise en œuvre/résultats que vous recherchez.
Fondamentalement, vous voulez garder toute la JVM dans la mémoire principale tout le temps.
- 1. passer un objet [] à un objet params [] ne fonctionne pas
- 2. Dire à IKImageBrowserView de ne pas planifier le préchargement
- 3. Comment dire à RadioButtonList de ne pas générer une table
- 4. ne peut pas pousser à distance Git repo
- 5. Comment dire à MVC de ne pas mettre en cache un aspx ou un ascx?
- 6. Comment dire à Java quel StringEscapeUtils.escapeXML() utiliser?
- 7. Pythonic Swap?
- 8. Comment puis-je dire à ActiveRecord de ne pas enregistrer de caractères de contrôle
- 9. Comment faire pour pousser GridbagLayout de ne pas poser de composants au centre de JPanel
- 10. Comment passer un objet de classe de Scala à Java?
- 11. Pousser vecteur de vecteurs
- 12. Pourquoi ne puis-je pas enregistrer un objet dans Django?
- 13. -à-dire l'initialisation du tableau associatif ne
- 14. Pousser un arbre source Git, pas seulement un référentiel
- 15. Pousser un jeton de périphérique de notification?
- 16. a: hover image d'arrière-plan swap ne fonctionne pas dans IE6
- 17. Comment valider une propriété d'un objet personnalisé dans un scénario de liaison de données (c'est-à-dire BindingList)?
- 18. La sérialisation Javascript de DateTime dans asp.net ne donne pas un objet date javascript?
- 19. En C++, comment pousser un objet vers un vecteur tout en maintenant un pointeur sur l'objet?
- 20. Pourquoi un opérateur swap/exchange n'existe-t-il pas dans les langages impératifs ou OO comme C/C++/C#/Java ...?
- 21. Iphone-sdk - « ne peut pas utiliser un objet comme paramètre à une méthode »
- 22. Pousser une liste de couleurs dans colordialog.customcolors
- 23. git: Tout à coup ne peut pas pousser, ou cloner, ou quoi que ce soit
- 24. objet Java Propriétés à chaîne
- 25. rails rjs remplacement et valeurs de swap
- 26. L'audio dans l'applet Java ne joue pas
- 27. NetBeans + Mercurial + SSH = Pousser/Pousser sans fin
- 28. jQuery Element Swap
- 29. Y at-il un moyen de dire quels fichiers ne sont pas utilisés dans un projet d'application Web
- 30. Pourquoi ne puis-je pas sérialiser un objet à l'aide de DataContractSerializer?
L'autre option, je suppose, serait de ne pas forcer l'application à garder tout en mémoire en une seule fois. La question vient plus de la curiosité que du besoin réel. Est-il possible de faire en C? –
Il est possible de coller certaines pages de mémoire en mémoire. C'est ce que font la plupart des environnements VM. –