java应该使用全局缓冲区而不是本地缓冲区吗?
复制时,commons io使用本地缓冲区:
Eclipse使用静态同步缓冲区来防止并发复制操作: http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/FileUtil.java?view=markup (搜索缓冲区)
在按顺序处理小文件时,静态缓冲区似乎可以提高性能,但在并行复制中会降低性能
eclipse静态同步缓冲区是否有实际的性能改进,或者它只是在工程设计阶段
在这种情况下,您建议使用什么
# 1 楼答案
如果你关心性能,我会使用直接字节缓冲。这种缓冲在推出时是最好的,但NIO(从2004年开始提供)比IMHO更快。(高达30%)
否则,分配的成本相当小(除非你试图避免GCs)
# 2 楼答案
我更喜欢commons io方法:更易于阅读,而且性能可能非常相似
代价是commons io将在每次copy()调用时创建一个新字节[8192]。但请记住两件事:
在大多数系统中,新字节[8192]几乎是瞬时的。这不是一个昂贵的构造函数调用
输入流。read()在大多数情况下通常非常慢!(例如,文件读取或套接字读取!)
因此,与实际的流复制相比,对新字节[8192]的调用将非常快。Eclipse优化(在这个特定的例子中)是一种虚假的经济(它不是瓶颈!)这会导致更复杂、更难理解的代码
# 3 楼答案
它实际上没有显著的性能差异,而静态缓冲区通常是一个非常糟糕的主意,除非您知道自己是线程安全的。他们这样做(如果你看评论的话)是因为他们理解更高级别对象中的同步
所以总是分配一个动态缓冲区