Domanda

È possibile dire alla JVM di suggerire al sistema operativo che un determinato oggetto non dovrebbe preferibilmente essere espulso per scambiare spazio?

È stato utile?

Soluzione

La risposta breve è no.

Java non ti consente alcun controllo su ciò che viene scambiato e ciò che viene "bloccato" nella RAM.

Preoccuparsi di questo genere di cose è di solito un segno che c'è qualcos'altro che non va nel tuo progetto. Nel complesso, il sistema operativo farà un lavoro molto migliore nel determinare cosa dovrebbe essere scambiato e cosa non dovrebbe. Il tuo compito è quello di scrivere il tuo software in modo che non provi a indovinare cosa farà la VM / OS sottostante, concentrati solo sulla fornitura delle tue funzionalità e su un buon design.

Altri suggerimenti

Questo problema è stato anche molto evidente in Eclipse e nel plug-in per hackerare KeepResident sporco ( http: // suif.stanford.edu/pub/keepresident/ ) lo evita.

Potrebbe essere un buon punto di partenza? Non l'ho visto in uso diffuso, quindi forse questo è stato integrato nella distribuzione standard di Eclipse?

Ehi! Stai programmando in una lingua gestita. Perché stai pensando a questi? Se non riesci a toglierti dalla testa queste cose, puoi sempre scegliere di programmare in C.

La risposta breve è (come indicato sopra): non farlo :-).

Sarebbe comunque possibile in linea di principio. La maggior parte dei sistemi operativi consente di "bloccare" alcune aree di memoria vengono scambiate (ad es. mlock (2) sotto Linux, VirtualLock sotto Windows ).

La VM potrebbe esporre questa funzionalità alle applicazioni Java tramite un'API adatta. Tuttavia, nessuna VM che conosco lo fa, quindi per farlo, dovresti prima modificare la tua VM ...

Se vi accedete regolarmente, qualunque sia la pagina in cui si trova in quel momento (la JVM sposta le cose durante la raccolta dei rifiuti) non verrà pagata a meno che qualcos'altro richieda memoria in modo ancora più aggressivo. Ma non c'è modo di dire a JVM di non spostarlo su un'altra pagina e il sistema operativo conosce solo le pagine.

Non una risposta, ma senza punti da commentare, mi riservo questa opzione :)

Vi sono ragioni per non archiviare informazioni in swap. Che si tratti di password o altre informazioni riservate che non dovrebbero passare l'eternità sul disco. Inoltre, tornando dopo un weekend sul mio PC, vorrei che alcune cose fossero immediatamente disponibili in memoria.

(Non Java) In modo nativo esiste probabilmente un modo per farlo per ciascuno / la maggior parte dei sistemi operativi. Con Windows questo è sicuramente possibile. Ma non direttamente da Java (pensa JNI). A seconda di quanto sia disperata questa opzione, puoi sempre guardare usando la memoria video o qualche altro dispositivo hardware che non si scambia. Ciò consente di utilizzare ancora un'API Java standard, come Jogl per memorizzare informazioni. Ma in qualche modo dubito che sia in contesto con l'implementazione / i risultati che stai cercando.

Fondamentalmente vuoi mantenere l'intera JVM nella memoria principale per tutto il tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top