我们有一个项目,在Tomcat应用程序中通过JacoZoom访问第三方DLL .显然DLL泄漏内存(由供应商确认),但供应商无意修复此问题.内存泄漏迫使Tomcat定期重启,这对用户来说自然是一个很大的不便.
解决这个问题的最佳方法是什么?我们考虑的一个选项是拥有Tomcat服务器的两个实例并定期重新启动另一个实例,并将用户重定向到另一个实例.
编辑:通过创建另一个DLL来解决,该DLL在需要时杀死并重新创建供应商DLL.基本上这三个kernel32调用用于完成功能:
Private Declare Function GetModuleHandle Lib "kernel32.dll" Alias "GetModuleHandleW" (ByVal DllName As Long) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
幸运的是,JacoZoom JAR文件似乎并不介意DLL被杀死并重新创建.