Check out http://android-developers.blogspot.com/2009/02/track-memory-allocations.html
Romain Guy points out in this post that the android garbage collector cannot optimize small short lived objects. These are exactly the sort of objects that could be created in a physics engine when it needs to generate dynamic collision constraints. A good solution in this case is to use a pool of constraint objects because they are all going to be the same size/object. The best solution in my mind would be for the compiler to do escape analysis on the objects and stack allocate them when it sees that they will never escape the function. I have been told that the Java byte code can't reference an object on the stack. It's possible that the Dalvik byte code can, I don't know. I don't have a reference for this, but I assume that Dalvik's inability to optimize small short lived object comes from the fact that it uses a mark and sweep GC. On all of my profiling, I see the GC take at least 100ms to run. For a game that means you miss from three to 10 frames of animation and it makes for a pretty noticeable hick up. And I don't think it's my application that is causing the garbage collector to fire. Unless the OpenGL ES calls do some memory allocation, which is entirely possible. I realize that any background task could move to the run queue and take some time away from my engine, it just happens to be the garbage collector most of the time. :) So the result is that the Garbage collector is problematic for me in two ways. First, it's not optimized to deal with the sort of small objects that tend to make for good encapsulations of mathematical types (like Fixed point number classes or Vector or Matrix classes). And secondly it takes a long time to run when it does garbage collect, resulting in dropped frames. -Anton On Apr 2, 3:32 pm, Mariano Kamp <mariano.k...@gmail.com> wrote: > It's maybe a bit off topic, but how do you know that Android's gc is > rudimentary? Have you got a link handy? > I only found > this:http://developer.android.com/guide/practices/design/performance.html > > On Thu, Apr 2, 2009 at 11:59 PM, Anton <socialhac...@gmail.com> wrote: > > > Shaun, thanks for checking it out. Yah, I agree that the real > > complexity of a physics engine comes from joints and contact > > constraints. The constraints in my demo are simple minimum distance > > constraints. I have a 2D rigid body physics engine that I'm thinking > > more and more about porting over to Android as well. This demo was > > more of a calibration for myself to see how much computation I can do, > > and what optimizations lead to the largest improvements. I'll > > probably turn it into a fun toy for the Market and then look into > > rewriting my rigid body engine for Android. > > > Reading through Simpull I noticed that you allocate a new Vector3f > > in your Verlet update routine. I think that will be a killer on the > > Android platform because of it's rudimentary garbage collector and > > limited RAM. My solution was to allocate an array of fixed point > > numbers, four per ball. Effectively a vector pool that didn't require > > any management because the number of balls never changed. > > > On Apr 2, 6:31 am, shaun <shashepp...@gmail.com> wrote: > > > I took a look at Anton's demo on a G1 device, and I was glad to see > > > the integration of accelerometer as it really added value. I assume > > > the calculations for collision detection and response are fairly > > > basic, which allows for that performance. > > > > Simpull will also provide good performance for a scene of that nature > > > (all verlet, no joints). At least I believe it will. The point where > > > simpull becomes slow is when a more complex scene is in play with 10s > > > of objects with many joints connecting some of them. Since the engine > > > is all verlet and no rigid body dynamics, joints are one way to > > > acheive a similar result, but with a very bad performance hit due to > > > all the new temporary objects and new calculations. > > > > I would be super impressed to see a demo like Anton's with rigid body > > > dynamics involved with at least some rectangles, if not other polygons > > > and perhaps a joint or two. That is where the performance degrades > > > quickly in my experience. > > > > On Apr 1, 2:45 pm, mscwd01 <mscw...@gmail.com> wrote: > > > > > Thanks Lajos for pointing APE out, I hadn't heard of it until now. > > > > > Unfortunately your link to your Android port is broken, can you mend > > > > it as I dont fancy spending another hour porting another library to > > > > Android :D > > > > > Thanks > > > > > On Mar 31, 9:50 pm, lkelemen <tridc...@gmail.com> wrote: > > > > > > Hello everyone, > > > > > > I was also disappointed with jbox2d's performance so I checked APE > > > > > (Actionscript Physics Engine) fromhttp://www.cove.org/ape/. > > > > > It was converted to java (http://www.cove.org/ape/java_ape.zip) so I > > > > > started to convert the java version to Android. > > > > > > The performance is quite OK for 10-20 objects at the first start of > > > > > the app but if you exit with the back key and restart it form the > > > > > installed copy > > > > > (either in the emulator or on the dev phone) then it gets slower and > > > > > slower with each start. If you restart it from the emulator (by > > > > > reinstalling it) then it is faster again. > > > > > Neither the pressed keys are not working (probably it is because of > > my > > > > > poor Android programming knowledge). > > > > > > Here is a zipped Android project of it. Please experiment with it and > > > > > send results to here i.e. is it slow for you also after re-re-re-.. > > > > > staring?www.kotiposti.net/lkelemen/android/testape2d.zip > > > > > > thanks > > > > > Lajos Kelemen > > > > > > On Mar 31, 9:26 pm, shaun <shashepp...@gmail.com> wrote: > > > > > > > I started going down the path of Object pooling. It seemed the > > only > > > > > > solution when taking an existing engine and making work on a > > resource > > > > > > constrained system like Android on a phone. Determining the > > strategy > > > > > > for returning objects to the pool proved quite tough for me. I > > have > > > > > > no doubt there are some experts on embedded systems programming > > with > > > > > > tons of experience with object pooling. We just would be too lucky > > if > > > > > > that person(s) was also experienced with Java, physics engines and > > had > > > > > > a passion for open source and games! Is that too much to ask? > > LOL!! > > > > > > > On Mar 31, 12:17 pm, mscwd01 <mscw...@gmail.com> wrote: > > > > > > > > Thanks for your feedback Shaun, I too unfortunately think a > > bespoke > > > > > > > engine will need to be written for Android, which is a real pity > > as > > > > > > > the iPhone has several physics engines which can easily handle > > > > > > > hundreds of objects. > > > > > > > > Having said that Anton (2nd reply) has said he has an engine > > running, > > > > > > > it would be nice to see a demo of this if that'd be possible? > > > > > > > > Clark, i'd definately host any .apk's on my own site, I wouldn't > > put > > > > > > > it on the marketplace if it wasn't a "finished" app - do people > > > > > > > actually do that?! > > > > > > > > I think i'll stay away from developing games with physics for the > > time > > > > > > > being and concentrate on something else, I cant see it being > > feasible > > > > > > > to include it any time soon which is a real pity. > > > > > > > > On Mar 31, 3:28 pm, shaun <shashepp...@gmail.com> wrote: > > > > > > > > > I am the author ofsimpull. > > > > > > > > > Sorry guys for the demo being out of whack forSimpullto the > > Core. > > > > > > > > The version of PulpCore that I integratedsimpullwith did not > > support > > > > > > > > Chrome, but you should be able to see it in IE, FF Safari. It > > is nice > > > > > > > > to take a look at that demo to get a feel for what the engine > > is > > > > > > > > capable of, but the performance does not translate over to the > > fixed > > > > > > > > point branch/version ofsimpullwhen running on Android. > > > > > > > > > I ran tests on both the emulator and the actual device and > > there was a > > > > > > > > significant increase in performance because of the fixed point > > > > > > > > implementation, but I got very frustrated that it still did not > > > > > > > > support the amount of objects in a scene that I considered good > > for a > > > > > > > > physics-based game. It seemed to handle ~10 objects moving and > > > > > > > > colliding OK. It has been a while since I was playing with it, > > so I > > > > > > > > do not really remember the exact number of objects or the frame > > rate. > > > > > > > > I mostly remember being upset with it. > > > > > > > > > I am leaving the physics ideas for games out of the picture > > when > > > > > > > > thinking Android for now. Someone would have to write a ground > > up > > > > > > > > engine with all the performance and memory concerns of Android > > in > > > > > > > > mind, which was not the case withSimpull.....I created it for > > > > > > > > applets, then thought to port over to fixed-point for Android. > > It > > > > > > > > works well with small scenes, but certainly not the staple > > engine to > > > > > > > > use in my opinion. > > > > > > > > > Also, Phys2D will not run worth a damn on Android. I tried it > > and I > > > > > > > > even went through some heavy performance tuning. Garbage > > collection > > > > > > > > is the major issue even after all I did. I seriously doubt > > JBox2D > > > > > > > > will run well either. I'll stick to what I said earlier, a > > ground-up > > > > > > > > solution by someone smarter than me is probably required. > > > > > > > > > On Mar 31, 9:49 am, "admin.androidsl...@googlemail.com" > > > > > > > > > <admin.androidsl...@googlemail.com> wrote: > > > > > > > > > Not tried but if you can provide us with some example source > > code or > > > > > > > > > put something on the market, I'm sure we could take a look. > > > > > > > > > > G1 performance is significantly faster than emulator, but > > there are > > > > > > > > > limitations. > > > > > > > > > > Particularly with garbage collection and memory allocation on > > code > > > > > > > > > that gets run continuously in loops, so I don't know how > > optimised > > > > > > > > > these physics engines are for this purpose. > > > > > > > > > > Would be interesting to find out though. > > > > > > > > > > On Mar 31, 12:52 pm, mscwd01 <mscw...@gmail.com> wrote: > > > > > > > > > > > Oh I forgot to re-ask... > > > > > > > > > > > "Has anyone tested Phys2D or JBox2D on an actual device to > > see if they > > > > > > > > > > run better than on the emulator? > > > > > > > > > > > I have a feeling the performance will better on a G1 than > > the emulator > > > > > > > > > > for some reason! > > > > > > > > > > > On Mar 31, 12:51 pm, mscwd01 <mscw...@gmail.com> wrote: > > > > > > > > > > > > I did take a look atSimpull, however the demo application > > failed to > > > > > > > > > > > run as it relied on some library which wasn't supplied or > > referenced > > > > > > > > > > > to - I just got annoyed after spending two days failing > > to get Phys2D > > > > > > > > > > > and JBox2D to work in Android and didn't bother trying to > > work out the > > > > > > > > > > > problems! > > > > > > > > > > > > I might give it another look though... > > > > > > > > > > > > On Mar 30, 10:41 pm, Streets Of Boston < > > flyingdutc...@gmail.com> > > > > > > > > > > > wrote: > > > > > > > > > > > > > I wonder how well this one works on Android: > > > > > > > > > > > > > http://code.google.com/p/simpull/ > > > > > > > > > > > > > -- Anton Spaans > > > > > > > > > > > > > On Mar 30, 4:58 pm, Anton <socialhac...@gmail.com> > > wrote: > > > > > > > > > > > > > > I have a simple 2D physics > > ... > > read more » --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---