別のバンドルからの受信データを待機し、受信時にデータを処理するサービスをOSGiに実装しようとしています。受信するパケット数がわからないため、を使用しています。私のコードは次のようになります。LinkedBlockingQueue
public class MyClass {
protected static LinkedBlockingQueue<JSONObject> inputQueue = new LinkedBlockingQueue<JSONObject>();
private ExecutorService workerpool = Executors.newFixedThreadPool(4);
public void startMyBundle() {
start();
}
protected void start() {
new Thread(new Runnable() {
public void run() {
while(true){
workerpool.execute(new Runnable() {
public void run() {
try {
process(inputQueue.take());
} catch (InterruptedException e) {
System.out.println("thread was interrupted.");
}
}
});
}
}
}).start();
}
public void transmitIn(JSONObject packet) {
try {
inputQueue.put(packet);
} catch (InterruptedException e) {
}
}
protected void process(JSONObject packet) {
//Some processing
}
これを実行していて、サービスに 1 つのパケットのみを送信すると、パケットは最初に処理されますが、プロセッサはその容量をすべて使用し、ほとんどの場合、次のOutOfMemoryError
ようになります。
java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "[Timer] - Periodical Task (Bundle 46) (Bundle 46)"
これの原因は何ですか?