[
https://issues.apache.org/jira/browse/HBASE-17233?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15722032#comment-15722032
]
ramkrishna.s.vasudevan commented on HBASE-17233:
------------------------------------------------
{code}
@State(Scope.Thread)
public class ArrayCopy {
byte[] b = new byte[10000];
byte[] res = new byte[10000];
byte[] res1 = new byte[10000];
@Setup
public void setup() {
}
@TearDown
public void teardown() {
}
@Benchmark
public void arrayCopy() {
arrayCopyInternal();
}
private void arrayCopyInternal() {
System.arraycopy(b, 10, res, 0, 990);
return;
}
@Benchmark
public void copyRange() {
copyOfRangeInternal();
}
private void copyOfRangeInternal() {
byte[] copyOfRange = Arrays.copyOfRange(b, 10, 10 + 990);
return;
}
public static void main(String[] args) throws RunnerException {
Options opt = new
OptionsBuilder().include(ArrayCopy.class.getSimpleName()).warmupIterations(1)
.measurementIterations(2).forks(1).build();
new Runner(opt).run();
}
}
{code}
I purposefully added 'return' so that we don't fall under the JMH's dead code
optimziation.
{code}
java -jar target/benchmarks.jar ArrayCopy -f 3 -i 5 -wi 5
{code}
> See if we should replace System.arrayCopy with Arrays.copyOfRange
> -----------------------------------------------------------------
>
> Key: HBASE-17233
> URL: https://issues.apache.org/jira/browse/HBASE-17233
> Project: HBase
> Issue Type: Improvement
> Affects Versions: 2.0.0
> Reporter: ramkrishna.s.vasudevan
> Assignee: ramkrishna.s.vasudevan
>
> Just saw this interesting comment in PB code. Since we deal with byte[]
> extensively (when we are onheap) we do lot of copies too.
> {code}
> * <p>One of the noticeable costs of copying a byte[] into a new array using
> * {@code System.arraycopy} is nullification of a new buffer before the
> copy. It has been shown
> * the Hotspot VM is capable to intrisicfy {@code Arrays.copyOfRange}
> operation to avoid this
> * expensive nullification and provide substantial performance gain.
> Unfortunately this does not
> * hold on Android runtimes and could make the copy slightly slower due to
> additional code in
> * the {@code Arrays.copyOfRange}.
> {code}
> So since we are hotspot VM we could see if the places we use System.arrayCopy
> can be replaced with Arrays.copyOfRange.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)