0

我有一个消费者/生产者计划,其中:

  • 要处理的项目(字符串)进入 BlockingQueue
  • 我从该 BlockingQueue 实例化执行 take() 的固定数量的线程,然后处理这些字符串。

处理线程是此类的实例:

class ProcessingThread extends Thread {

    private void process(String s) {
        (big method with calls to other big methods)
    }

    public void run() {
        String s = queue.take();
        process(s);
    }
}

转换为 Executor 将非常简单:字符串将与 Runnable 一起直接进入 Executor:

class Task implements Runnable {

     private void process(String s) {
        (big method with calls to other big methods)
    }

    public void run() {
         process(s);
     }

}

接着:

executor.execute(new Task(s));

但是......每次我实例化一个任务时,它都会实例化一个非常大的代码块(处理器)——我不能这样,内存要求会很高。

我该怎么做呢?

4

1 回答 1

0

我最终接受了 Damien O'Reilly 的建议。

然后你需要相应地分配你的虚拟机堆。或根据需要水平和/或垂直缩放。但正如您所知,多次实例化一个类不会导致所述类字节码的多个副本。– Damien O'Reilly 10 月 20 日 16:43

于 2015-11-15T07:24:56.437 回答