Java RAM&Swap

Résolu
cs_heavenboy Messages postés 22 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 1 décembre 2009 - 9 juil. 2009 à 10:28
cs_heavenboy Messages postés 22 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 1 décembre 2009 - 10 juil. 2009 à 22:40
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

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
9 juil. 2009 à 10:35
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.
3
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
9 juil. 2009 à 10:52
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
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juil. 2009 à 10:58
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.
3
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
9 juil. 2009 à 11:11
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
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_heavenboy Messages postés 22 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 1 décembre 2009
10 juil. 2009 à 22:40
Merci pour vos réponses
0
Rejoignez-nous