强制显式删除 Java 对象
我正在开发一个Java服务器,该服务器可以处理大量非常密集的流量。服务器接受来自客户端的数据包(通常为数 MB),并将其转发到其他客户端。服务器从不显式存储任何传入/传出数据包。然而,服务器不断遇到异常。OutOfMemoryException
我添加到服务器的消息传递组件中,希望内存能够释放。此外,我将 JVM 的堆大小设置为 1 GB。我仍然有很多例外。System.gc()
所以我的问题是:我如何确保兆字节消息不会无限期排队(尽管不需要)?有没有办法对这些对象调用“delete”来保证它们没有使用我的堆空间?
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