gpt4 book ai didi

java - Quartz Scheduler 不断创建导致 OutOfMemoryError 的新对象

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:33 25 4
gpt4 key购买 nike

我刚刚按照快速入门指南实现了 Quartz:

import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class Quartz {

public static void startScheduler() throws InterruptedException{

try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// Grab the Scheduler instance from the Factory
scheduler.start(); // and start it off

JobDetail job = newJob(RepetitiveRun.class)
// define the job and tie it to RepetitiveRun class
.requestRecovery()// ask scheduler to re-execute this job
.withIdentity("job1", "group1")
.build();

Trigger trigger = newTrigger()
// Trigger the job to run now, and then repeat every x seconds
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(2)
// how often should the job repeat (once every x seconds)
.repeatForever())
.build();

scheduler.scheduleJob(job, trigger);
// Tell quartz to schedule the job using our trigger

try {
Thread.sleep(1200000000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // how many seconds the Main should run

scheduler.shutdown();

} catch (SchedulerException se) {
se.printStackTrace();
}

}

}

实现 Job 的 RepetitiveRun 类执行查询并写入文件。

问题是heap不断增加,过了一段时间抛出java.lang.OutOfMemoryError。

使用 VisualVM,我发现与 RepetitiveRun 类关联的 Activity 字节数、 Activity 对象数和生成数不断增加,这表明这是内存泄漏的原因。

是否可以让 Quartz 删除/释放在已完成的作业执行期间创建的所有对象?

最佳答案

通常这是垃圾收集器的工作(工作完成后进行清理)。

当作业完成并且作业中不再有引用时,垃圾收集器应该清理。

我怀疑你要么将你的工作泄露到它之外(例如,将 this 传递给存储对你的工作的引用的任何其他对象)。

或者您没有清理必须由您清理的资源(例如数据库连接或文件句柄)。

这会导致内存泄漏,您必须使用探查器追踪内存泄漏并清理所需内容(通过不将对象泄漏到外部或关闭您打开/创建的所有资源)。

关于java - Quartz Scheduler 不断创建导致 OutOfMemoryError 的新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com