4 ms·
Not the same, but they had the same problem - GC pauses when it likes, not when you like. If you know calling move_hero() takes 23ms, 15 of which is ARC you can
by sitharus 12y ago
Not the same, but they had the same problem - GC pauses when it likes, not when you like. If you know calling move_hero() takes 23ms, 15 of which is ARC you can plan for that. You can't plan for move_hero() taking 7ms, except when GC happens.
- cromwellian 12y agoDepending on VM, Java developers can plan where the pauses happen. One way they do that is by object pooling, another is by using DirectBuffers/off-head memory. A third way to do it is with scoped heaps. It's not like tons of games haven't been shipped with non ref-count GC. Minecraft being the most famous, but games on Unity3D/Mono can have non-ref count GC. Lua is shipped in tons of game engines and uses classic GC. Regardless of whether you are using automatic GC, or if you are using malloc/free, you can't write a high performance game without carefully working around memory issues. Even C/C++ games like Max Payne have shipped with frame hiccups caused by poor malloc/free behavior that had to be fixed with custom allocators. If you're writing a game, you have to pay attention to what you're doing. But do non-framrate limited games and regular apps need ref-count GC? I suggest no, they do not.
- rsynnott 12y ago> But do non-framrate limited games and regular apps need ref-count GC? I suggest no, they do not. Practically the first piece of advice usually given when someone asks "how do I make my Android app non-laggy" is to avoid allocation wherever possible; even a single frame drop due to a GC pause when the user is scrolling a list, say, can be noticeable.
- cromwellian 12y agoAndroid's GC is not optimal/best of breed. ART is introducing much lower pause times for Android AFAIK. Low pause GC is possible. See http://openjdk.java.net/jeps/189 http://openjdk.java.net/jeps/189 or Zing/Azul (absolutely pauseless GC or so they claim)
- pcwalton 12y agoAzul C4 uses a custom kernel extension. It's not really a general purpose GC for user-level apps. (There are kernel-extension-free variations of it, but they suffer from reduced throughput over the HotSpot GC.)
- cromwellian 12y agoThat's true, but for a mobile device, you can control the kernel, it it may be, from a user experience point of view, that reducing pause latency is better than high throughput. I dunno, has anyone ever considered using Azul-like tricks on mobile kernels? Does ARM have the required HW to support it efficiently? What's FirefoxOS doing for it's GC?