desastreux
Messages postés
50
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
5 août 2009
2 déc. 2004 à 10:08
Bon, bon, si vous avez été malin, vous avez sauté le roman fleuve pour arriver directement à la réponse ci-dessous :
Ce code permets donc de modifier à la demande de l'utilisateur, la RAM à allouer à la JVM pour les CLASS suivantes d'une même archive JAR, et permets en plus de déterminer la RAM présente sur le système pour proposer un MAX pertinent :
(Rappellez-vous que cela ne marchera pas pour une APPLET non signée ! )
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class untitled {
JFrame frame = new JFrame(" Launcher RAM / JVM ");
JPanel ihm = new JPanel();
JSlider jSlider1 = new JSlider();
JLabel infoRAM = new JLabel();
JButton jButton1 = new JButton();
static int Mb = 1048760;
static int sysRam;
JLabel jLabel1 = new JLabel();
public static void main(String[] args)
{ // On va tester la RAM max présente sur le système CLIENT ( Ici à partir de 1792 Mo, en diminuant : )
sysRam = 1792;
if (args.length < 1) // Pas d'argument lorsque cette CLASSS a été lancée (premier lancement)
{
try
{
Process processus;
String batchC;
do
{
System.out.println("Chargement du test d'émulation à : " + sysRam + " Mo.");
batchC = "java -Xms" + ( (int) ( (Runtime.getRuntime().maxMemory() - Runtime.getRuntime().freeMemory()) / Mb)) +
"m -Xmx" + sysRam + "m -jar monArchiveAvecMonAppliEtCetteCLASSenManifest.jar ramTEST";
processus = Runtime.getRuntime().exec(batchC);
try { int endProc = processus.waitFor(); }
catch (java.lang.InterruptedException itrptE) {}
System.out.println("Etude du test d'émulation à : " + sysRam + " Mo / términé ! Erreur Code = " + processus.exitValue());
sysRam -= 64; // On va tester en diminuant de 64 Mo à chaque fois jusqu'à obtenir le MAX voulu
}
while ( (processus.exitValue() != 0) && (sysRam > 64));
if (processus.exitValue() == 0)
{ // Valeur MAX trouvée : On relance notre appli avec cette valeur/JVM ( à titre de TEST )
batchC = "java -jar monArchiveAvecMonAppliEtCetteCLASSenManifest.jar " + (sysRam + 64);
processus = Runtime.getRuntime().exec(batchC);
System.out.println(processus);
}
System.exit(0);
}
catch (java.io.IOException e2) { System.out.println(e2); }
}
else if ( (args[0].compareTo("ramOK") != 0) && (args[0].compareTo("ramTEST") != 0))
{ // L'argument passé en paramètre lorsque cette CLASS se relance déterminera le constructeur...
sysRam = (Integer.valueOf(args[0])).intValue();
RAMtester toto = new RAMtester(false);
} // ( Voir ci-dessous ) Pour savoir s'il faut ou non proposer à l'utilisateur de changer la RAM.
else if (args[0].compareTo("ramOK") == 0)
{ RAMtester toto = new RAMtester(true); }
else if (args[0].compareTo("ramTEST") == 0)
{
System.out.println("TEST d'émulation en cours...");
System.exit(0);
}
}
public RAMtester(boolean okay)
{ // Constructeur :
if (!okay)
{ // L'objet est construit avec un booléen qui lui signifie...
try { jbInit();}
catch (java.lang.Exception jle) {}
} // ...S'il faut proposer à l'utilisateur de changer la RAM...
else if (okay)
{ // ... Ou bien de lancer la CLASS voulue, avec la RAM actuelle :
String[] rien = {"", ""};
maCLASSappli = new maCLASSapli(); // ça y'est !
try { this.finalize(); }
catch (java.lang.Throwable th) {}
} // Cette RAM actuelle a été obtenue grâce à la récursivité de celle-ci :
}
public void jbInit() throws Exception
{ // I.H.M. pour choisir la RAM à allouer à la JVM :
jSlider1.setMaximum(sysRam);
jSlider1.setMinimum( ( (int) ( (Runtime.getRuntime().maxMemory() - Runtime.getRuntime().freeMemory()) / Mb)));
jSlider1.setValue(sysRam/2);
jSlider1.addChangeListener(new RAMtester_jSlider1_changeAdapter(this));
jSlider1.setSize(430, 25);
jSlider1.setLocation(25, 50);
infoRAM.setBounds(new Rectangle(25, 25, 430, 25));
infoRAM.setFont(new java.awt.Font("Comic Sans MS", 1, 20));
infoRAM.setHorizontalAlignment(SwingConstants.CENTER);
infoRAM.setForeground(new Color(0, 0, 102));
infoRAM.setBorder(BorderFactory.createRaisedBevelBorder());
infoRAM.setBackground(new Color(100, 200, 200));
infoRAM.setText("RAM à allouer : " + String.valueOf(jSlider1.getValue()) + " Mo");
infoRAM.setOpaque(true);
ihm.setLayout(null);
jButton1.setBounds(new Rectangle(278, 267, 109, 25));
jButton1.setText("OK");
jButton1.addActionListener(new RAMtester_jButton1_actionAdapter(this));
jLabel1.setBackground(new Color(100, 230, 210));
jLabel1.setForeground(Color.darkGray);
jLabel1.setBorder(BorderFactory.createRaisedBevelBorder());
jLabel1.setOpaque(true);
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel1.setText("Mo");
jLabel1.setBounds(new Rectangle(421, 170, 33, 27));
ihm.add(jSlider1, null);
ihm.add(infoRAM, null);
ihm.add(jLabel1, null);
ihm.add(jButton1, null);
ihm.add(jLabel3, null);
frame.getContentPane().add(ihm, BorderLayout.CENTER);
Dimension d = new java.awt.Dimension(480, 300);
ihm.setPreferredSize(d);
ihm.setBackground(new Color(20, 20, 102));
frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.show();
}
void jSlider1_stateChanged(ChangeEvent e)
{ infoRAM.setText("RAM à allouer /JVM : " + String.valueOf(jSlider1.getValue()) + " Mo"); }
void jButton1_actionPerformed(ActionEvent e)
{ // L'utilisateur a choisi la RAM et fait OK :
try
{
System.out.println("Veuillez attendre SVP : L'application doit se relancer avec les nouveaux paramètres d'allocation de RAM/JVM");
String batchC = "java -Xms" +
( (int) ( (Runtime.getRuntime().maxMemory() - Runtime.getRuntime().freeMemory()) / Mb)) + "m -Xmx" +
jSlider1.getValue() + "m -jar loaderDXF.jar ramOK";
Process processus = Runtime.getRuntime().exec(batchC);
System.exit(0);
}
catch (java.io.IOException e2) { System.out.println(e2); }
}
}
class RAMtester_jSlider1_changeAdapter
implements javax.swing.event.ChangeListener
{// LISTENER pour le SLIDER
RAMtester adaptee;
RAMtester_jSlider1_changeAdapter(RAMtester adaptee) {
this.adaptee = adaptee;
}
public void stateChanged(ChangeEvent e) {
adaptee.jSlider1_stateChanged(e);
}
}
class RAMtester_jButton1_actionAdapter
implements java.awt.event.ActionListener
{// LISTENER pour le bouton de validation
RAMtester adaptee;
RAMtester_jButton1_actionAdapter(RAMtester adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}