Java缓冲区大小会成为瓶颈吗?

时间:2013-06-30 11:05:27

标签: java c++

我创建了一个Java应用程序,其中GUI与外部C ++可执行文件交互。

我正在使用ProcessBuilder从C ++ executsble创建和附加/ out /错误到GUI。我正在使用大小为1024的缓冲区。如果C ++以非常高的速度执行大量的printf语句,而Java GUI读取1024个大小的字符,该怎么办?这会造成瓶颈吗?

public void run()
{
        try
        {
            char[] buffer = new char[1024];
            for (int n = reader.read(); n != -1; n = reader.read(buffer))
            {
                writeBytes2Text(buffer, 0, n);
            }
        }
        catch (Exception x) 
        {
            //some exception
        }
    }

2 个答案:

答案 0 :(得分:0)

无论缓冲区的大小如何,瓶颈都会留下来。唯一真正的出路是尽可能地优化Java端。例如,以间隔很小的间隔更新GUI,尽可能多地缓冲以缩短时间间隔。通常不那么频繁,粗粒度更新将提高吞吐量。

答案 1 :(得分:0)

1024字节缓冲区大小没问题,但4096可能稍好一些。

大多数延迟都来自上下文切换,睡眠和唤醒线程。除非Java端缓冲区的大小要小得多,否则您不会引入吞吐量问题。

C ++输出流可能正在使用默认的4096字节输出缓冲区。如果C ++进程正在慢慢打印输出,那么在累积4096个字节之前,您将看不到任何结果。