summaryrefslogtreecommitdiffstats
path: root/src/test/java
diff options
context:
space:
mode:
authorTravis Watkins <amaranth@ubuntu.com>2012-09-11 05:51:09 -0500
committerTravis Watkins <amaranth@ubuntu.com>2012-09-21 11:20:10 -0500
commit74b3be57b77ff3bee30b8fb0fd993c325d7f9207 (patch)
tree6489bffc74a33452a3a9298eae2ed50569fefef9 /src/test/java
parent9f70c1f3864632b90a4c4edfbde7f6fc2c10b9b0 (diff)
downloadcraftbukkit-74b3be57b77ff3bee30b8fb0fd993c325d7f9207.tar
craftbukkit-74b3be57b77ff3bee30b8fb0fd993c325d7f9207.tar.gz
craftbukkit-74b3be57b77ff3bee30b8fb0fd993c325d7f9207.tar.lz
craftbukkit-74b3be57b77ff3bee30b8fb0fd993c325d7f9207.tar.xz
craftbukkit-74b3be57b77ff3bee30b8fb0fd993c325d7f9207.zip
Replace LongObjectHashMap with a more efficient implementation
After further testing it appears that while the original LongHashtable has issues with object creation churn and is severly slower than even java.util.HashMap in general case benchmarks it is in fact very efficient for our use case. With this in mind I wrote a replacement LongObjectHashMap modeled after LongHashtable. Unlike the original implementation this one does not use Entry objects for storage so does not have the same object creation churn. It also uses a 2D array instead of a 3D one and does not use a cache as benchmarking shows this is more efficient. The "bucket size" was chosen based on benchmarking performance of the HashMap with contents that would be plausible for a 200+ player server. This means it uses a little extra memory for smaller servers but almost always uses less than the normal java.util.HashMap. To make up for the original LongHashtable being a poor choice for generic datasets I added a mixer to the new implementation based on code from MurmurHash. While this has no noticable effect positive or negative with our normal use of chunk coordinates it makes the HashMap perform just as well with nearly any kind of dataset. After these changes ChunkProviderServer.isChunkLoaded() goes from using 20% CPU time while sampling to not even showing up after 45 minutes of sampling due to the CPU usage being too low to be noticed.
Diffstat (limited to 'src/test/java')
0 files changed, 0 insertions, 0 deletions