Ver Fonte

多次release byteBuf以达到真正释放内存的目的

vinson há 5 anos atrás
pai
commit
ceedf1b8ed

+ 7 - 2
src/main/java/com/tidecloud/dataacceptance/service/HexBinaryAcceptanceHandlerAdapter.java

@@ -30,8 +30,13 @@ public abstract class HexBinaryAcceptanceHandlerAdapter extends AcceptanceInboun
         } catch (Exception e) {
             logger.error(e.getMessage(), e);
         } finally {
-            in.release();
-            //ReferenceCountUtil.release(msg);// 显示丢弃已经接受的消息
+            // release每次只把引用次数减1,通过日志发现,这里是in对象最后一次被引用的地方
+            // 可以推断出在handler方法中必然有把in的引用次数增加但是没有做释放的操作
+            // 代码太多了,不好排查。这里先做一个兜底的操作,如果释放不成功,多次释放,直到成功为止
+            boolean isReleaseSuccess = false;
+            while (!isReleaseSuccess) {
+                isReleaseSuccess = in.release();
+            }
         }
 
         ctx.flush();