Deux méthodes totalMemory et freeMemory permettent de connaître la quantité de mémoire disponible sur le système informatique, où est installé la Machine Virtuelle Java (JVM).

La méthode Runtime.totalMemory() retourne la taille totale de la mémoire dont dispose la Machine Virtuelle Java.

public long totalMemory()

long taille = Runtime.getRuntime().totalMemory();

La valeur de cette méthode peut varier en fonction de l'environnement hôte.

La méthode Runtime.freeMemory() retourne la quantité de mémoire libre du système.

public long freeMemory()

long taille = Runtime.getRuntime().freeMemory();

L'appel de la méthode gc() pour le nettoyage de la mémoire, peut entrainer une augmentation de la valeur retournée par freeMemory().

Le nombre retourné par totalMemory() ou freeMemory(), mesurant la quantité de mémoire disponible, est exprimé en octets (bytes). Son type est un entier long.

Exemple [voir]
public class Memoire {
    public static void main(String[] args){
      System.out.print("Mémoire totale : ");
      System.out.print(Runtime.getRuntime().totalMemory() / 1000000d);
      System.out.println("Mo.");
      System.out.print("Mémoire disponible : ");
      System.out.print(Runtime.getRuntime().freeMemory() / 1000000d);
      System.out.println("Mo.");

      System.out.println("Manipulation d'un objet String");
      String chaine = new String("La chaîne n°0");
      for(int i = 1; i <= 1000; i++){
        chaine = chaine.replaceAll(String.valueOf(i -1), String.valueOf(i));
        if(i % 100 == 0) {
            System.out.print(chaine);
            System.out.print(" - Mémoire consommée : ");
            System.out.print((Runtime.getRuntime().totalMemory() 
                                - Runtime.getRuntime().freeMemory())/1000d);
            System.out.println("ko.");
        }
      }
      System.out.println("Manipulation d'un objet StringBuffer");
      StringBuffer chaine2 = new StringBuffer("La chaîne n°0.");
      for(int i = 1; i <= 1000; i++){
        String nb = String.valueOf(i - 1); 
        int ind = chaine2.indexOf(nb);
        chaine2.replace(ind, ind + nb.length(), String.valueOf(i));
        if(i % 100 == 0) {
            System.out.print(chaine2);
            System.out.print(" - Mémoire consommée : ");
            System.out.print((Runtime.getRuntime().totalMemory() 
                                - Runtime.getRuntime().freeMemory())/1000d);
            System.out.println("ko.");
        }
      }
      System.out.println();

      System.out.print("Mémoire totale : ");
      System.out.print(Runtime.getRuntime().totalMemory() / 1000000d);
      System.out.println("Mo.");
      System.out.print("Mémoire disponible : ");
      System.out.print(Runtime.getRuntime().freeMemory() / 1000000d);
      System.out.println("Mo.");
    }
  }