Thank you Romain ..
On Jul 18, 10:25 am, Romain Guy <[email protected]> wrote: > http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;... > > On Sat, Jul 18, 2009 at 4:38 AM, Fred > > > > Grott(shareme)<[email protected]> wrote: > > > Romain, was it renamed cannot find it by your link.. > > > On Jul 15, 3:55 pm, Romain Guy <[email protected]> wrote: > >> We have an efficient implementation for you: use thePools.java file > >> fromhttp://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;... > >> (and the associated classes.) These are not public APIs so just copy > >> the code in your application. > > >> Here's an example of a Poolable object with this API: > >> static class InvalidateInfo implements Poolable<InvalidateInfo> { > >> private static final int POOL_LIMIT = 10; > >> private static final Pool<InvalidateInfo> sPool > >> =Pools.synchronizedPool( > >> Pools.finitePool(new PoolableManager<InvalidateInfo>() { > >> public InvalidateInfo newInstance() { > >> return new InvalidateInfo(); > >> } > > >> public void onAcquired(InvalidateInfo element) { > >> } > > >> public void onReleased(InvalidateInfo element) { > >> } > >> }, POOL_LIMIT) > >> ); > > >> private InvalidateInfo mNext; > > >> public void setNextPoolable(InvalidateInfo element) { > >> mNext = element; > >> } > > >> public InvalidateInfo getNextPoolable() { > >> return mNext; > >> } > > >> static InvalidateInfo acquire() { > >> return sPool.acquire(); > >> } > > >> void release() { > >> sPool.release(this); > >> } > >> } > > >> On Wed, Jul 15, 2009 at 1:48 PM, Brad Larson<[email protected]> wrote: > > >> > At Google I/O and in the forums, it has been clear that if you need > >> > optimal performance, you must avoid memory allocation inside tight > >> > loops. I'm curious about the best way to handle this in my use-case, > >> > which I think must be fairly common. I need to access at most n > >> > objects of type MyObject, I need to iterate over them during every > >> > screen refresh, and I need to remove them and put them back in the > >> > object pool randomly. > > >> > The object pool seems pretty straight-forward, just use a > >> > Vector<MyObject>(n), add n copies of MyObject at bootup, and add/ > >> > remove from the end to avoid any memcpy or allocation. > > >> > The iterating is a little more difficult. I can use for(MyObject m : > >> > myObjects), but this will allocate memory to create the iterator. I > >> > could create a static final Iterator at bootup, but there is no good > >> > way to get back to the start of the List. For now, I'm using another > >> > Vector for active MyObjects, and a for loop with an int to get() the > >> > objects and avoid allocating an iterator. get() runs in constant time > >> > for a Vector, so this works well. > > >> > However, when an object is done, I need to remove it and send it back > >> > to the pool. If I use Vector.remove(i), it has to memcpy everything > >> > after i. I could use an Iterator on a LinkedList, which can remove() > >> > in constant time, but I don't think there is a good way to get the > >> > Iterator back to the start of the list without allocating memory. I > >> > could use an int to loop through a LinkedList, but LinkedList.get(n) > >> > runs in O(n) time. > > >> > Any tips on the optimal way to solve this? Worst-case, I assume the > >> > memcpy called during Vector.remove() is a better bet over allocating > >> > an Iterator inside my app loop, correct? > > >> > Thanks! > >> > Brad > > >> -- > >> Romain Guy > >> Android framework engineer > >> [email protected] > > >> Note: please don't send private questions to me, as I don't have time > >> to provide private support. All such questions should be posted on > >> public forums, where I and others can see and answer them > > -- > Romain Guy > Android framework engineer > [email protected] > > Note: please don't send private questions to me, as I don't have time > to provide private support. All such questions should be posted on > public forums, where I and others can see and answer them --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---

