Comment prevoir le passage du ramasse miettes ?

khaled001 Messages postés 156 Date d'inscription mardi 19 août 2008 Statut Membre Dernière intervention 8 août 2016 - 9 avril 2012 à 20:13
 Utilisateur anonyme - 10 avril 2012 à 23:02
Salut

Voila j'ai un programme tous simple pour utilisation de l'api rmi et j'ai besoin de prevoir le passge du ramasse miettes au bout de 10ms, ensuite 1ms avec affichage d'un message indiquant son passage

Comment faire ça svp ?

Voici mes classes :

HelloInterface.java

import java.rmi.*;
public interface HelloInterface extends Remote{
 
  /*methode imprimant un message prédéfini dans l'objet appelé*/
  public String sayHello() throws RemoteException;
 
}


HelloImpl.java

import java.rmi.*;
import java.rmi.server.*;
 
public class HelloImpl extends UnicastRemoteObject implements HelloInterface{
 
  private String message;
  /*Le constructeur*/
  public HelloImpl(String s) throws RemoteException{
  super();
  // appelé automatiquement pour que l'OD puisse accepter les requetes
  message = s;}
  /*implementation de la méthode*/
  public String sayHello() throws RemoteException{
  return message;
  }
 
}


HelloServer.java

import java.rmi.*;
public class HelloServer{
 public static void main(String[] args){
  try{
   /*creer une instance de classe Hello et l'enregistrer dans le serveur de noms */
   Naming.rebind("Hello1",new HelloImpl("Hello World!"));
   System.out.println("Serveur pret:");
  }catch (Exception e){
   System.out.println("Erreur serveur:" +e);      
  }
 }
}


HelloClient.java

import java.rmi.*;
 
public class HelloClient {
 
public static void main(String[] args){
try{	
/*cherche reference objet distant*/
HelloInterface hello = (HelloInterface)Naming.lookup("rmi://localhost/Hello1");
/*appel de method a distance*/
System.out.println(hello.sayHello());
}catch (Exception e){
     System.out.println("Erreur client:" +e);      
}
  }
}


Cordialement

5 réponses

Utilisateur anonyme
9 avril 2012 à 23:56
Pourquoi as-tu besoin de prévoir le passage du ramasse miettes ? Généralement c'est le système (OS ou JVM je ne sais plus) qui s'occupe de ça...


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
khaled001 Messages postés 156 Date d'inscription mardi 19 août 2008 Statut Membre Dernière intervention 8 août 2016
10 avril 2012 à 00:17
c'est une question qui se trouve sur ma fiche de tp seance de tp a la fac du cours architecture et logiciel repartie voila pkoi j'en ai besoin :)
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 avril 2012 à 08:33
Bonjour,

Tout comme Pylouq, je m'interroge vraiment sur l'intérêt cet exercice. Tu ne peux que détériorer les performances en gérant toi même le ramasse miettes.

Tu peux toujours l'appeler avec la méthode System.gc(); mais je te le déconseil
0
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
10 avril 2012 à 14:46
pareil sur l'utilité

Sinon, il déclenche entre 80 et 82% du heap occupé pour un passage full sauf si l'on modifie le paramètre MaxHeapFreeRatio ou un passage toutes les heures sauf si l'on modifie les paramètres sun.rmi.dgc.client.gcInterval & sun.rmi.dgc.server.gcInterval

http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
0

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

Posez votre question
Utilisateur anonyme
10 avril 2012 à 23:02
Donc du coup en reprenant ce qui vient d'être dis, tu devrais calculer le taux d'occupation du tas (heap) en fonction des objets instanciés et voir si tu atteins ces fameux 80%... Tu pourrais nous donner moyen de voir le sujet stp ?


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
Rejoignez-nous