Java缓冲区大小会成为瓶颈吗
Will Java Buffer size be a bottleneck?
我创建了一个Java应用程序,其中GUI与外部C++可执行文件交互。
我使用ProcessBuilder从C++执行程序创建输入/输出/错误并将其附加到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
}
}
无论缓冲区的大小如何,瓶颈都会一直存在。唯一真正的解决方法是尽可能多地优化Java端。例如,每隔一段时间更新GUI,尽可能多地缓冲以弥补时间差距。通常,频率较低、粒度较粗的更新将提高吞吐量。
1024字节的缓冲区大小可以,但4096可能稍好一些。
大多数延迟将来自上下文切换、睡眠和唤醒线程。除非Java端缓冲区的大小要小得多,否则不会带来吞吐量问题。
C++输出流可能使用默认的4096字节输出缓冲区。如果C++进程正在缓慢地打印输出,那么在累积4096个字节之前,您不会看到任何输出。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 在java中解决这段代码时面临循环中的问题
- FlatBuffers C++从缓冲区转换为对象,仅适用于root_type(而Java具有所有)
- 将缓冲区从SuperpoweredAndroidIO传递到Java InputStream / Android NDK
- 如何从java传递给jni的字节缓冲区中进行写和读
- 当数据被写入协议缓冲区时,我如何让Java触发C++程序,反之亦然
- 如何使用协议缓冲区和 ZeroMQ 在 c++ 和 java 之间交换二进制数据
- Java缓冲区大小会成为瓶颈吗
- 从C/ c++在内存中写入缓冲区,然后在没有JNI的情况下用java从它中读取
- 谷歌协议缓冲区-编码在c++,解码在Java - InvalidProtocolBufferException
- Google协议缓冲区(Java到C++)
- SWIG/Java 从 C++ 获取未知大小的缓冲区