From 3ffb02e51ee81a7a6eb4bd908dbab08aefe9e114 Mon Sep 17 00:00:00 2001 From: ryanhamshire Date: Thu, 9 Oct 2014 15:07:11 -0700 Subject: [PATCH] Memory footprint: Claims Lookup Eliminated unwanted chunk loads from claim lookups and boot process. Also a slight perf improvement for claim lookup. --- .../ryanhamshire/GriefPrevention/Claim.java | 21 +++++++++++++++ .../GriefPrevention/DataStore.java | 26 ++++++++++--------- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/me/ryanhamshire/GriefPrevention/Claim.java b/src/me/ryanhamshire/GriefPrevention/Claim.java index aae4aaf..a95592c 100644 --- a/src/me/ryanhamshire/GriefPrevention/Claim.java +++ b/src/me/ryanhamshire/GriefPrevention/Claim.java @@ -841,4 +841,25 @@ public class Claim return chunks; } + + public ArrayList getChunkStrings() + { + ArrayList chunkStrings = new ArrayList(); + World world = this.getLesserBoundaryCorner().getWorld(); + int smallX = this.getLesserBoundaryCorner().getBlockX() >> 4; + int smallZ = this.getLesserBoundaryCorner().getBlockZ() >> 4; + int largeX = this.getGreaterBoundaryCorner().getBlockX() >> 4; + int largeZ = this.getGreaterBoundaryCorner().getBlockZ() >> 4; + + for(int x = smallX; x <= largeX; x++) + { + for(int z = smallZ; z <= largeZ; z++) + { + StringBuilder builder = new StringBuilder(String.valueOf(x)).append(world.getName()).append(z); + chunkStrings.add(builder.toString()); + } + } + + return chunkStrings; + } } diff --git a/src/me/ryanhamshire/GriefPrevention/DataStore.java b/src/me/ryanhamshire/GriefPrevention/DataStore.java index d4d6a1e..ba76edc 100644 --- a/src/me/ryanhamshire/GriefPrevention/DataStore.java +++ b/src/me/ryanhamshire/GriefPrevention/DataStore.java @@ -214,15 +214,14 @@ public abstract class DataStore //add it and mark it as added this.claims.add(newClaim); - ArrayList chunks = newClaim.getChunks(); - for(Chunk chunk : chunks) + ArrayList chunkStrings = newClaim.getChunkStrings(); + for(String chunkString : chunkStrings) { - String chunkID = this.getChunkString(chunk); - ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkID); + ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkString); if(claimsInChunk == null) { claimsInChunk = new ArrayList(); - this.chunksToClaimsMap.put(chunkID, claimsInChunk); + this.chunksToClaimsMap.put(chunkString, claimsInChunk); } claimsInChunk.add(newClaim); @@ -377,11 +376,10 @@ public abstract class DataStore break; } - ArrayList chunks = claim.getChunks(); - for(Chunk chunk : chunks) + ArrayList chunkStrings = claim.getChunkStrings(); + for(String chunkString : chunkStrings) { - String chunkID = this.getChunkString(chunk); - ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkID); + ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkString); for(int j = 0; j < claimsInChunk.size(); j++) { if(claimsInChunk.get(j).id.equals(claim.id)) @@ -423,7 +421,7 @@ public abstract class DataStore if(cachedClaim != null && cachedClaim.inDataStore && cachedClaim.contains(location, ignoreHeight, true)) return cachedClaim; //find a top level claim - String chunkID = this.getChunkString(location.getChunk()); + String chunkID = this.getChunkString(location); ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkID); if(claimsInChunk == null) return null; @@ -448,9 +446,13 @@ public abstract class DataStore } //gets a unique, persistent identifier string for a chunk - private String getChunkString(Chunk chunk) + private String getChunkString(Location location) { - StringBuilder builder = new StringBuilder(chunk.getWorld().getName()).append(chunk.getX()).append(chunk.getZ()); + StringBuilder builder = new StringBuilder( + String.valueOf(location.getBlockX() >> 4)) + .append(location.getWorld().getName()) + .append(location.getBlockZ() >> 4); + return builder.toString(); }