Java RAM&Swap

[Résolu]
Signaler
Messages postés
22
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
1 décembre 2009
-
Messages postés
22
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
1 décembre 2009
-
Bonjour,
je fais tourner de grosses applications java sur ubuntu, qui me prennent toute la RAM. Plus question de faire d'autre chose quand ces applications tournent. J'ai entendu parler de la swap. J'ai lu que la swap pouvait pallier la ram dans de tel cas. Pourriez vous me dire comment je peux dire à mes applications de tourner sur la swap et non sur la ram.

Merci.

5 réponses

Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
8
Salut,

le swap est géré par l'OS et non par l'appli. Ca fait partie de ce qu'on appelle la "mémoire virtuelle" (RAM + swap)
Sur un linux, la RAM est utilisée au max. Si ce n'est pas suffisant c'est le système qui va décider d'utiliser le swap.
De plus l'utilisation du swap ralentit l'application car les accès disque sont plus lents que les accès en RAM.
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
5 novembre 2009

Et surtout, quelques notions de Système d'exploitation (et d'ordinateur).

La mémoire ne peut être utilisée (pour faire des calculs) QU'UNE FOIS DANS LA RAM !

Il pourrait être possible de brancher les bus d'addresse et de données du CPU sur un controleur de disque, et d'avoir ainsi une "ram sur disque dur".. pour un CPU de 10 hz ! (donc la seule chose qui va tourner, c'est pas ton appli mais ton disque ...)

Mais, cela dit , les systèmes d'exploitation découpent la mémoire des programmes en "pages" . Une page peut être sur la ram, ou dans la swap.

Aux programmeurs de choisir le bon design pour minimiser le nombre de pages accédées en même temps.

Ceci dit, sur linux , tu peux à l'aide de la commande "nice", réduire l'importance d'une appli dans le CPU (et donc dans la ram, car linux met dans la RAM ce qui n'est pas actif)

nice -n 20 java -jar monjar.jar

La commande ci-dessus lance une appli java avec la priorité minimale (20)
Plus le nice est grand,  plus la priorité est basse.

;I'm just keeping the hopeless cross to increase the meaninglessness
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
124
Salut,

Il ne tiens qu'à toi d'optimiser ton programme pour qu'il consomme moins de mémoire, en utilisant des patterns adéquat : le poids mouche par exemple qui permet d'éviter d'avoir une multitude de petits objets en mémoire (qui prennent donc beaucoup de mémoire) et ainsi économiser beaucoup de RAM et de SWAP.

Rappelle toi aussi qu'en java un objet non utilisé n'est pas forcément libéré de la mémoire, donc ca peut être normal qu'un programme qui utilise de nombreux objets temporaire voit son occupation mémoire grimper très haut, et quand le garbage collector se déclenche, son occupation mémoire retombe à des niveaux bien plus raisonnables.
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
5 novembre 2009

yup mais en général, objet non inutilisé et garbage collector pas passé -> objet non déplacé en mémoire et non écrit/lu -> L'OS balance sa page dans la swap (enfin, si la page n'était utilisée que par l'objet ... )

on va retomber dans les eternels débats d'obtimisations de mallocateur de mémoire  visant à regrouper les objets peu utilisés dans une même zone de mémoire.. ce qu'on ne peut PAS faire en java :p

I'm just keeping the hopeless cross to increase the meaninglessness
Messages postés
22
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
1 décembre 2009

Merci pour vos réponses