[ https://issues.apache.org/jira/browse/ARROW-5221?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17662244#comment-17662244 ]
Rok Mihevc commented on ARROW-5221: ----------------------------------- This issue has been migrated to [issue #21695|https://github.com/apache/arrow/issues/21695] on GitHub. Please see the [migration documentation|https://github.com/apache/arrow/issues/14542] for further details. > Improvement the performance of class SegmentsUtil > ------------------------------------------------- > > Key: ARROW-5221 > URL: https://issues.apache.org/jira/browse/ARROW-5221 > Project: Apache Arrow > Issue Type: Improvement > Reporter: Liya Fan > Assignee: Liya Fan > Priority: Minor > > Improve the performance of class SegmentsUtil from two points: > # In method allocateReuseBytes, the generated byte array should be cached > for reuse, if the size does not exceed MAX_BYTES_LENGTH. However, the array > is not cached if bytes.length < length, and this will lead to performance > overhead: > > if (bytes == null) { > if (length <= MAX_BYTES_LENGTH) { > bytes = new byte[MAX_BYTES_LENGTH]; > BYTES_LOCAL.set(bytes); > } else { > bytes = new byte[length]; > } > } else if (bytes.length < length) { > bytes = new byte[length]; > } > > 2. To evaluate the offset, an integer is bitand with a mask to clear to low > bits, and then shift right. The bitand is useless: > > ((index & BIT_BYTE_POSITION_MASK) >>> 3) > -- This message was sent by Atlassian Jira (v8.20.10#820010)