Java中的可重置计时器性能

时间:2013-10-29 02:53:58

标签: java android performance concurrency java.util.concurrent

在分析我的应用程序时,我找到了频繁分配的来源...我正在使用多个计时器来检查超时(约2毫秒,因应用程序状态而异)。

根据this SO answerScheduledThreadPoolExecutor优于Timer。因此,我使类与this other SO answer非常相似,按照建议安排任务。我这样使用它:

private final ResettableTimer timer = new ResettableTimer(new Runnable() {
    public void run() {
        //timeout, do something
    }
});

timer.reset(2, TimeUnit.MILLISECONDS);

我发现每次调度任务时,java都会分配以下内容:

java.util.concurrent.LinkedBlockingQueue$Node - 16个字节 java.util.concurrent.Executors$RunnableAdapter - 16个字节 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask - 64个字节 java.util.concurrent.locks.AbstractQueuedSynchronizer$node - 28个字节

例如:2个定时器,500个任务/秒= 124kB / s

这很小,但它会导致非常频繁的垃圾收集。它现在似乎没有引起我的问​​题,虽然它可能是我在旧设备上看到的一些口吃的原因。我应该担心吗?

更重要的是,这些分配看起来非常不必要,因为这些任务在&再次。有没有办法避免这种重新分配?

0 个答案:

没有答案