java进程句柄数量达到6万

问题遇到的现象和发生背景

最近用java写了一个http代理,idea中将项目跑起来稳定之后,通过任务管理器看到该进程拥有的句柄数量达到6万左右,项目是会在运行过程中频繁创建socket,但是我代码中在运行数据传输完成后或者出现IO异常都会进行socket.close()操作,我通过netstat 命令查看了tcp连接的情况,只有十几个连接,我的问题是:
1、为什么会持有这么多的句柄;
2、我通过什么方式可以查看句柄的更详细信息,好进一步找出句柄多的原因

用代码块功能插入代码,请勿粘贴截图

这是什么应用?要这么多句柄,可以用连接池来处理吗?或者改用netty来优化网络通讯。