[英]Memory leak in Flux, but where?
内存泄漏可能是处理器配置为无订阅者的无限制队列的标志。 可视vm屏幕截图在路径中显示“队列”,这就是我建议这样做的原因。
以下将导致内存泄漏:
UnicastProcessor<Integer> subject = UnicastProcessor.create();
int j = 0;
for(int i = 0; i < 400000000; i++) {
Integer g = Integer.valueOf(i);
subject.onNext(g);
if(j++ > 100000) {
j = 0;
long memoryUsage = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
System.out.println(memoryUsage / 1024 / 1024);
}
}
默认情况下,调用UnicastProcessor.create()使用一个无界队列。 由于没有订阅者,因此项目在队列中累积。 解决方案只是确保处理器具有订户,如下所示:
UnicastProcessor<Integer> subject = UnicastProcessor.create();
----> subject.subscribe();
int j = 0;
for(int i = 0; i < 400000000; i++) {
Integer g = Integer.valueOf(i);
subject.onNext(g);
if(j++ > 100000) {
j = 0;
long memoryUsage = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
System.out.println(memoryUsage / 1024 / 1024);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.