有没有办法在java程序因无法创建线程oom的时候自动监测到这个情况并重启这个程序啊

我这里有一个java的服务,用来给别人提供数据库查询服务,然后查询的时候会往一个map中加入一个用于存放数据库长连接的一个类,而这个类会创建出50多个线程。所以不出意外的,在创建的长连接足够多之后,就会出现oom,无法创建新线程。目前这个长连接的类源码对我们不开放,我们没法进行修改,同时由于每个长连接背后对应的数据表不同,也没办法公用一个长连接。我们之前已经设置了一个定时任务,将超过24h没有使用的长连接释放,不过前些天还是出现了这样的oom。我们还试了用jvm的onoutofmemoryerror参数,但是在线程不足的情况下这个参数的效果无法触发。所以大佬们,还有什么别的办法吗?

第一:加大内存咯,但是这种治标不治本
第二:程序中加入定时任务,定期检测服务器内存,90%的时候,就释放你的长链接
第三:liunx服务器写脚本咯,当内存大于90%,就重启程序咯
第四:我觉得你们程序有点问题,对外提供查询服务,你频繁访问数据库?能顶住压力吗?redis怎么没用上?还有查询数据是否合理,有没有设置最大数据量参数?不会我传100w你就返回100w?那你内存不oom才怪。还是得从代码层控制