improve memory usage

This commit is contained in:
REAndroid 2023-04-26 15:29:19 +02:00
parent ac7c49c22b
commit b61611ab68
3 changed files with 23 additions and 24 deletions

View File

@ -29,7 +29,7 @@ import java.util.Iterator;
public class EntryGroup extends ItemGroup<Entry> { public class EntryGroup extends ItemGroup<Entry> {
private final int resourceId; private final int resourceId;
public EntryGroup(int resId) { public EntryGroup(int resId) {
super(create(), String.format("0x%08x", resId)); super(ARRAY_CREATOR, String.valueOf(resId));
this.resourceId=resId; this.resourceId=resId;
} }
public int getResourceId(){ public int getResourceId(){
@ -220,6 +220,10 @@ public class EntryGroup extends ItemGroup<Entry> {
return packageBlock.getSpecStringPool(); return packageBlock.getSpecStringPool();
} }
@Override @Override
public int hashCode(){
return resourceId;
}
@Override
public String toString(){ public String toString(){
Entry entry =pickOne(); Entry entry =pickOne();
if(entry ==null){ if(entry ==null){
@ -227,18 +231,17 @@ public class EntryGroup extends ItemGroup<Entry> {
} }
return super.toString()+"{"+ entry.toString()+"}"; return super.toString()+"{"+ entry.toString()+"}";
} }
private static BlockArrayCreator<Entry> create(){
return new BlockArrayCreator<Entry>(){
@Override
public Entry newInstance() {
return new Entry();
}
@Override private static final BlockArrayCreator<Entry> ARRAY_CREATOR = new BlockArrayCreator<Entry>(){
public Entry[] newInstance(int len) { @Override
return new Entry[len]; public Entry newInstance() {
} return new Entry();
}; }
}
@Override
public Entry[] newInstance(int len) {
return new Entry[len];
}
};
} }

View File

@ -27,12 +27,10 @@ import java.util.Objects;
private final BlockArrayCreator<T> mBlockArrayCreator; private final BlockArrayCreator<T> mBlockArrayCreator;
private final String name; private final String name;
private T[] items; private T[] items;
private final int hashCode;
public ItemGroup(BlockArrayCreator<T> blockArrayCreator, String name){ public ItemGroup(BlockArrayCreator<T> blockArrayCreator, String name){
this.mBlockArrayCreator=blockArrayCreator; this.mBlockArrayCreator=blockArrayCreator;
this.name=name; this.name=name;
this.items=blockArrayCreator.newInstance(0); this.items=blockArrayCreator.newInstance(0);
this.hashCode = Objects.hash(getClass(), name);
} }
public Iterator<T> iterator(){ public Iterator<T> iterator(){
return iterator(false); return iterator(false);
@ -139,12 +137,12 @@ import java.util.Objects;
} }
@Override @Override
public int hashCode(){ public int hashCode(){
return hashCode; return 31 * name.hashCode();
} }
@Override @Override
public boolean equals(Object obj){ public boolean equals(Object obj){
if(obj instanceof StringGroup){ if(obj instanceof StringGroup){
return hashCode==obj.hashCode(); return hashCode()==obj.hashCode();
} }
return false; return false;
} }

View File

@ -28,18 +28,16 @@ import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException; import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetDecoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.*;
import java.util.Collection;
import java.util.List;
public class StringItem extends BlockItem implements JSONConvert<JSONObject> { public class StringItem extends BlockItem implements JSONConvert<JSONObject> {
private String mCache; private String mCache;
private boolean mUtf8; private boolean mUtf8;
private final List<ReferenceItem> mReferencedList; private final Set<ReferenceItem> mReferencedList;
public StringItem(boolean utf8) { public StringItem(boolean utf8) {
super(0); super(0);
this.mUtf8=utf8; this.mUtf8=utf8;
this.mReferencedList=new ArrayList<>(); this.mReferencedList = new HashSet<>();
} }
public boolean removeReference(ReferenceItem ref){ public boolean removeReference(ReferenceItem ref){
return mReferencedList.remove(ref); return mReferencedList.remove(ref);
@ -53,7 +51,7 @@ public class StringItem extends BlockItem implements JSONConvert<JSONObject> {
public boolean hasReference(){ public boolean hasReference(){
return mReferencedList.size()>0; return mReferencedList.size()>0;
} }
public List<ReferenceItem> getReferencedList(){ public Collection<ReferenceItem> getReferencedList(){
return mReferencedList; return mReferencedList;
} }
public void addReference(ReferenceItem ref){ public void addReference(ReferenceItem ref){
@ -62,7 +60,7 @@ public class StringItem extends BlockItem implements JSONConvert<JSONObject> {
} }
} }
public void addReferenceIfAbsent(ReferenceItem ref){ public void addReferenceIfAbsent(ReferenceItem ref){
if(ref!=null && !mReferencedList.contains(ref)){ if(ref!=null){
mReferencedList.add(ref); mReferencedList.add(ref);
} }
} }