Bernd Hopp created IO-468:
-----------------------------
Summary: Avoid allocating memory for method internal buffers, use
threadlocal memory instead
Key: IO-468
URL: https://issues.apache.org/jira/browse/IO-468
Project: Commons IO
Issue Type: Improvement
Components: Utilities
Affects Versions: 2.4
Environment: all environments
Reporter: Bernd Hopp
Priority: Minor
Fix For: 2.5
In a lot of places, we allocate new buffers dynamically via new byte[]. This is
a performance drawback since many of these allocations could be avoided if we
would use threadlocal buffers that can be reused. For example, consider the
following code from IOUtils.java, ln 2177:
return copyLarge(input, output, inputOffset, length, new
byte[DEFAULT_BUFFER_SIZE]);
This code allocates new memory for every copy-process, that is not used outside
of the method and could easily and safely reused, as long as is is
thread-local. So instead of allocating new memory, a new utility-class could
provide a thread-local bytearray like this:
byte[] buffer = ThreadLocalByteArray.ofSize(DEFAULT_BUFFER_SIZE);
return copyLarge(input, output, inputOffset, length, buffer);
I have not measured the performance-benefits yet, but I would expect them to be
significant, especially when the streams itself are not the performance
bottleneck.
Git PR is at https://github.com/apache/commons-io/pull/6/files
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)