2009-03-03 7 views

Répondre

11

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.

1

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.

+0

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? –

+0

Il est possible de coller certaines pages de mémoire en mémoire. C'est ce que font la plupart des environnements VM. –

1

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 ...

1

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.

3

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?

1

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.

0

Fondamentalement, vous voulez garder toute la JVM dans la mémoire principale tout le temps.

Questions connexes