Pergunta

É possível dizer a JVM sugerir o sistema operacional que um determinado objeto deve, de preferência não são empurrados para o espaço swap?

Foi útil?

Solução

A resposta curta não é.

Java não permite nenhum controle sobre o que é trocado eo que é 'preso' na RAM.

Se preocupar com esse tipo de coisa é geralmente um sinal de que há algo errado em seu projeto. O sistema operacional será em geral fazer um trabalho muito melhor de trabalhar para fora o que deve ser trocado eo que não deve. Seu trabalho é escrever o seu software de tal forma que ele não tente adivinhar o que subjacente VM / OS vai fazer, apenas se concentrar em entregar seus recursos e um bom design.

Outras dicas

Este problema também tem sido muito perceptível em Eclipse eo sujo KeepResident corte plug-in ( http: // suif.stanford.edu/pub/keepresident/ ) evita-lo.

Pode ser um bom lugar para começar? Eu não vi isso em uso generalizado então talvez isso foi integrado na distribuição padrão do Eclipse?

Hey! Você está programando em uma linguagem gerenciada. Por que você está pensando sobre isso? Se você não pode obter essas coisas fora de sua mente, você pode sempre optar por programa em C.

A resposta curta é (como dado acima): 'Não fazê-lo: -).

No entanto, seria possível, em princípio. A maioria dos OS que permitem "bloqueio" certas áreas de memória de ser trocado (por exemplo mlock (2) sob Linux, VirtualLock no Windows).

A VM pode expor essa funcionalidade para aplicações Java através de uma API adequado. No entanto, nenhum VM eu conheço faz isso, de modo a fazê-lo, você primeiro tem que modificar seu VM ...

Se você acessá-lo regularmente, que qualquer página que passa a ser em no momento (os JVM move coisas ao redor durante a coleta de lixo) não vai ser paginada, a menos que outra coisa está solicitando memória ainda mais agressiva. Mas não há nenhuma maneira de dizer que a JVM não movê-lo para outra página, e o sistema operacional só sabe sobre páginas.

Não é uma resposta, mas sem pontos de comentário, I reservar esta opção:)

Há razões para não armazenar informações em troca. Seja senhas ou outras informações confidenciais que não devem passar a eternidade no disco. Além disso, voltando depois de um fim de semana para o meu pc, eu gostaria de algumas coisas para estar na memória imediatamente disponíveis.

(Non Java) Nativamente provavelmente há alguma maneira de fazer isso para cada a maioria dos sistemas operacionais /. Com janelas este é definitivamente possível. Mas não em linha reta fora do java (pense JNI). Dependendo de como desesperado esta opção é, você pode sempre olhar usando memória de vídeo, ou algum outro dispositivo de hardware que não trocar. Isso permite que você ainda usar um java api standardish, como JOGL para armazenar informações. Mas de alguma forma eu duvido que está em contexto com a implementação / resultados que você está procurando.

Basicamente você quer manter toda a JVM na memória principal o tempo todo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top