Force explicite la suppression d'un objet Java

Je travaille sur un serveur Java qui gère un très grand nombre de très la circulation est dense. Le serveur accepte les paquets provenant de clients (souvent un grand nombre de méga-octets) et les transmet à d'autres clients. Le serveur n'a jamais explicitement stocke tous les appels entrants/sortants des paquets. Pourtant, le serveur s'exécute continuellement dans OutOfMemoryException exceptions.

J'ai ajouté System.gc() dans le message passing composant du serveur, en espérant que la mémoire sera libérée. En outre, j'ai réglé la taille du segment de mémoire de la JVM d'un gigaoctet. Je suis encore en train de tout comme de nombreuses exceptions.

Donc ma question est: comment puis-je m'assurer que le mégaoctet, les messages ne sont pas mis en file d'attente indéfiniment (bien que n'étant pas nécessaire)? Est-il un moyen pour moi de l'appeler "supprimer" sur ces objets afin de garantir qu'ils ne sont pas à l'aide de mon espace de tas?

        try
        {
           while (true)
            {
               int r = generator.nextInt(100);//generate a random number between 0 and 100
                Object o =readFromServer.readObject();
                sum++;
                //if the random number is larger than the drop rate, send the object to client, else
                //it will be dropped
                if (r > dropRate)
                {
                    writeToClient.writeObject(o);
                    writeToClient.flush();
                    numOfSend++;
                    System.out.printf("No. %d send\n",sum);
                }//if

            }//while
        }//try
Pour répondre à certaines des réponses ici mon code ne stocke pas les références. Le serveur est un proxy Socks qui passe les Objets. J'ai une boucle while qui lit un objet à partir d'un flux entrant et l'écrit dans un flux sortant. C'est tout. La recherche dans les profileurs de mémoire maintenant.
lire le chapitre de "Effective Java" très rapidement 😉
ne vous fermez ces flux? Donner un peu de code
Non, nous ne sommes pas près des ruisseaux. Ils sont vivants pour l'ensemble du cycle de vie du programme. Je vais poster le code en question. writeToClient est un objectoutputstream. Donc, est readFromServer.
Je veux dire readFromServer est un objectinputstream.

OriginalL'auteur Curious George | 2010-02-01