Java 执行器服务关闭-卡夫卡
我从卡夫卡获取消息,并使用类似于下面的Executor服务处理它们。我没有调用executorService.shutdown()。我偶尔会看到heapSize异常,但不确定这是否是原因之一。如何在完成后删除未使用的可运行实例?我应该做一些具体的事情来明确地使它符合GC的条件吗Java 执行器服务关闭-卡夫卡,java,apache-kafka,executorservice,kafka-consumer-api,Java,Apache Kafka,Executorservice,Kafka Consumer Api,我从卡夫卡获取消息,并使用类似于下面的Executor服务处理它们。我没有调用executorService.shutdown()。我偶尔会看到heapSize异常,但不确定这是否是原因之一。如何在完成后删除未使用的可运行实例?我应该做一些具体的事情来明确地使它符合GC的条件吗 public class Consumer implements CommandLineRunner{ ExecutorService executorService; executorService
public class Consumer implements CommandLineRunner{
ExecutorService executorService;
executorService = Executors.newFixedThreadPool(50)
executorService.submit(runnable);
}
}
来自执行器的文档。newFixedThreadPool: 创建一个线程池,该线程池重用固定数量的操作线程 离开共享的无界队列。在任何时候,最多读取个线程 将是活动的处理任务。如果提交了其他任务 当所有线程都处于活动状态时,它们将在队列中等待,直到 线程是可用的。如果任何线程在运行期间由于故障而终止 在关闭前执行,如果需要,将替换一个新的 执行后续任务。池中的线程将一直存在到 它是显式关闭的 例如,线程池中最多有50个活动线程,当您调用
shutdown
方法时,这些线程将被释放
如果您没有保留对Runnable
s的引用,则在Executor
处理完这些引用后,它们将被GCed。如果出现内存不足异常,这可能是由于执行者无法跟上提交给他的工作时,队列中的Runnable
s造成的
编辑:如果任务占用大量内存(显然),也可能发生内存不足异常