java免费游戏,java – 分配免费游戏
我的代碼基本上是免費分配的,但是當60fps時,GC每30秒運行一次.使用DDMS檢查應用程序以進行分配顯示有大量的SimpleListIterator被分配.還有一些東西被分配,因為我使用
Exchanger.
SimpleListIterator來自(T obj:objs){}的每個循環.我的印象是編譯器/翻譯器會優化那些不使用迭代器來支持它的類型(我基本上只使用ArrayList),但似乎并非如此.
如何避免分配所有這些SimpleListIterators?一種解決方案是切換到常規for循環(int i = 0; i< size; i){}但我喜歡每個循環:( 另一種方法是擴展ArrayList,它返回一個只分配一次的Iterator. 我一起攻擊的第三種方法是使用靜態輔助函數,它返回一個重用迭代器的Collection.我一起攻擊了這樣的東西,但鑄件感覺非常黑暗和不安全.它應該是線程安全的,因為我使用ThreadLocal?見下文:
public class FastIterator {
private static ThreadLocal holders = new ThreadLocal();
public static Iterable get(ArrayList list) {
Holder cont = holders.get();
if (cont == null) {
cont = new Holder();
cont.collection = new DummyCollection();
cont.it = new Iterator();
holders.set(cont);
}
Iterator it = (Iterator) cont.it;
DummyCollection collection = (DummyCollection) cont.collection;
it.setList(list);
collection.setIterator(it);
return collection;
}
private FastIterator() {}
private static class Holder {
public DummyCollection> collection;
public Iterator> it;
}
private static class DummyCollection implements Iterable {
private Iterator> it;
@Override
public java.util.Iterator iterator() {
return (java.util.Iterator) it;
}
public void setIterator(Iterator> it) {
this.it = it;
}
}
private static class Iterator implements java.util.Iterator {
private ArrayList list;
private int size;
private int i;
@Override
public boolean hasNext() {
return i < size;
}
@Override
public T next() {
return list.get(i++);
}
@Override
public void remove() {
}
public void setList(ArrayList list) {
this.list = list;
size = list.size();
i = 0;
}
private Iterator() {}
}
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java免费游戏,java – 分配免费游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置babel_Babel 7 下配置
- 下一篇: android listview 数据数