this post was submitted on 21 Jan 2024
8 points (90.0% liked)

Game Development

3536 readers
1 users here now

Welcome to the game development community! This is a place to talk about and post anything related to the field of game development.

Community Wiki

founded 2 years ago
MODERATORS
top 3 comments
sorted by: hot top controversial new old
[–] Redkey 7 points 11 months ago

Object pooling is an absolute necessity for performance in modern environments that remove all manual memory management in favour of automatic garbage collection. And it's still good practice to reuse memory when you do have some manual control.

Not many things will slow your program down (or make a garbage collector blow up) as effectively as alternately freeing and requesting tiny chunks of memory from the OS thousands of times a second.

[–] porgamrer 3 points 11 months ago (1 children)

Honestly this is usually bad advice nowadays, for a bunch of reasons:

  1. Modern allocators do the same thing as object pooling internally, usually faster. They rarely interact with the OS.

  2. A GC will do things like zero old memory on another thread, unlike a custom clearing function in a scripting language.

  3. Object pooling breaks the generational hypothesis that most modern garbage collectors are designed around; it can actually make performance much worse. Most GCs love short-lived objects.

  4. Object pools increase code complexity and are very error prone; when you add a new field you have to remember to clear it in the pool.

  5. If you are in a non-GC language you probably want something "data-oriented" like a slotmap, not a pool of object allocations.

Having said all that, it still all depends on the language/VM you're targeting. The guy in the video clearly benchmarked his use case.

[–] [email protected] 5 points 11 months ago

The guy in the video clearly benchmarked his use case.

This is the real answer in almost any scenario. Don't optimize without hard evidence.