我如何强制Android垃圾收集旧套接字信息?

时间:2010-12-06 03:54:51

标签: android sockets garbage-collection android-ndk

我有一个项目,我正在使用通过JNI访问的许多现有C ++代码开发Android应用程序,这些代码可以打开和关闭套接字。

即使这个C ++正确处理它打开的套接字的关闭,似乎Android OS或JVM仍然保留对下一次GC调用之前使用的那些套接字/端口的引用。

如果我们在下一次GC调用之前停止应用并再次启动应用程序,则应用程序无法在同一个套接字/端口上创建连接。如果我们等待操作系统调用GC并且然后重新启动应用程序,它会成功创建连接。

有没有办法从Android / JVM的角度手动释放套接字?也许是套接字类实用程序?手动调用GC?

2 个答案:

答案 0 :(得分:5)

应用程序关闭后,操作系统的TCP / IP协议栈会保留TCP端口两分钟。因此,如果您有一个已接受连接的侦听套接字,该端口将在几分钟内保持不可用。

在将套接字绑定到侦听地址之前,请使用选项= SO_REUSEADDR并使用值1来调用套接字上的setsockopt()。

答案 1 :(得分:0)

尝试

System.gc();

文件说......

  

void java.lang.System.gc()   表示虚拟   机器,这将是一个美好的时光   运行垃圾收集器。注意   这只是一个提示。没有   保证垃圾收集器   实际上会被运行。