pluginagentmarketplace/custom-plugin-game-developer/memory-management
Trust tier 2
- community
- By pluginagentmarketplace
- Coding
- pluginagentmarketplace/custom-plugin-game-developer
- skills/memory-management/SKILL.md
- Updated 20 Oct 2026
- Version 2.0.01 version recorded
Source check pending
Checking that the SKILL.md file is still in the repository.
Game memory optimization, object pooling, garbage collection tuning, and efficient resource management for target platforms.
Install
npx vskill@latest install pluginagentmarketplace/custom-plugin-game-developer/memory-managementSKILL.md
Memory Management
Memory Architecture
┌─────────────────────────────────────────────────────────────┐│ GAME MEMORY LAYOUT │├─────────────────────────────────────────────────────────────┤│ STACK (Fast, Auto-managed): ││ ├─ Local variables ││ ├─ Function parameters ││ └─ Return addresses ││ ││ HEAP (Slower, Manual/GC-managed): ││ ├─ Dynamic allocations (new/malloc) ││ ├─ Game objects ││ └─ Asset data ││ ││ STATIC (Fixed at compile time): ││ ├─ Global variables ││ ├─ Static class members ││ └─ Constant data ││ ││ VRAM (GPU Memory): ││ ├─ Textures ││ ├─ Meshes ││ └─ Render targets │└─────────────────────────────────────────────────────────────┘
Platform Memory Budgets
MEMORY BUDGET GUIDELINES:┌─────────────────────────────────────────────────────────────┐│ PLATFORM │ TOTAL │ GAME LOGIC │ ASSETS │ BUFFER │├────────────────┼──────────┼────────────┼──────────┼────────┤│ Mobile Low │ 512 MB │ 50 MB │ 350 MB │ 112 MB ││ Mobile High │ 2 GB │ 200 MB │ 1.5 GB │ 300 MB ││ Console │ 8 GB │ 500 MB │ 6 GB │ 1.5 GB ││ PC Min │ 4 GB │ 300 MB │ 3 GB │ 700 MB ││ PC High │ 16 GB │ 1 GB │ 12 GB │ 3 GB ││ VR │ 8 GB │ 400 MB │ 6 GB │ 1.6 GB │└────────────────┴──────────┴────────────┴──────────┴────────┘VRAM BUDGETS:┌─────────────────────────────────────────────────────────────┐│ Mobile: 512 MB - 1 GB ││ Console: 8-12 GB (shared with RAM) ││ PC Low: 2-4 GB ││ PC High: 8-16 GB │└─────────────────────────────────────────────────────────────┘
Object Pooling
csharp
// ✅ Production-Ready: Generic Object Poolpublic class ObjectPool<T> where T : class{private readonly Stack<T> _pool;private readonly Func<T> _createFunc;private readonly Action<T> _onGet;private readonly Action<T> _onReturn;private readonly int _maxSize;public int CountActive { get; private set; }public int CountInPool => _pool.Count;public ObjectPool(Func<T> createFunc,Action<T> onGet = null,Action<T> onReturn = null,int initialSize = 10,int maxSize = 100){_createFunc = createFunc;_onGet = onGet;_onReturn = onReturn;_maxSize = maxSize;_pool = new Stack<T>(initialSize);// Pre-warm poolfor (int i = 0; i < initialSize; i++){_pool.Push(_createFunc());}}public T Get(){T item = _pool.Count > 0 ? _pool.Pop() : _createFunc();_onGet?.Invoke(item);CountActive++;return item;}public void Return(T item){if (item == null) return;_onReturn?.Invoke(item);CountActive--;if (_pool.Count < _maxSize){_pool.Push(item);}// If pool is full, let GC collect the item}public void Clear(){_pool.Clear();CountActive = 0;}}// Usage Example: Bullet Poolpublic class BulletManager : MonoBehaviour{private ObjectPool<Bullet> _bulletPool;void Awake(){_bulletPool = new ObjectPool<Bullet>(createFunc: () => Instantiate(bulletPrefab).GetComponent<Bullet>(),onGet: bullet => bullet.gameObject.SetActive(true),onReturn: bullet => bullet.gameObject.SetActive(false),initialSize: 50,maxSize: 200);}public Bullet SpawnBullet(Vector3 position, Vector3 direction){var bullet = _bulletPool.Get();bullet.Initialize(position, direction);bullet.OnDestroyed += () => _bulletPool.Return(bullet);return bullet;}}
Garbage Collection Optimization
GC SPIKE PREVENTION:┌─────────────────────────────────────────────────────────────┐│ AVOID IN UPDATE/HOT PATHS: ││ ✗ new object() ││ ✗ string concatenation ("a" + "b") ││ ✗ LINQ queries (ToList(), Where(), etc.) ││ ✗ Boxing value types ││ ✗ Closures/lambdas capturing variables ││ ✗ foreach on non-struct enumerators ││ ││ DO INSTEAD: ││ ✓ Object pooling ││ ✓ StringBuilder for strings ││ ✓ Pre-allocated collections ││ ✓ Struct-based data ││ ✓ Cache delegates ││ ✓ for loops with index │└─────────────────────────────────────────────────────────────┘
csharp
// ✅ Production-Ready: Allocation-Free Patternspublic class AllocationFreePatterns{// ❌ BAD: Allocates every framevoid BadUpdate(){string status = "Health: " + health + "/" + maxHealth; // Allocatesvar enemies = allEntities.Where(e => e.IsEnemy).ToList(); // Allocatesforeach (var enemy in enemies) { } // May allocate enumerator}// ✓ GOOD: Zero allocationsprivate StringBuilder _sb = new StringBuilder(64);private List<Entity> _enemyCache = new List<Entity>(100);void GoodUpdate(){// Reuse StringBuilder_sb.Clear();_sb.Append("Health: ").Append(health).Append("/").Append(maxHealth);// Reuse list, avoid LINQ_enemyCache.Clear();for (int i = 0; i < allEntities.Count; i++){if (allEntities[i].IsEnemy)_enemyCache.Add(allEntities[i]);}// Index-based iterationfor (int i = 0; i < _enemyCache.Count; i++){ProcessEnemy(_enemyCache[i]);}}}
Memory Profiling
PROFILING WORKFLOW:┌─────────────────────────────────────────────────────────────┐│ 1. BASELINE: Measure memory at known state ││ → Startup, menu, gameplay, level transition ││ ││ 2. MONITOR: Track over time ││ → Memory growth indicates leaks ││ → Spikes indicate heavy allocations ││ ││ 3. SNAPSHOT: Capture heap at suspicious moments ││ → Compare snapshots to find what's growing ││ ││ 4. TRACE: Find allocation source ││ → Stack trace shows where allocation happened ││ → Identify hot paths ││ ││ 5. FIX: Apply optimization ││ → Pool, cache, or eliminate allocation ││ ││ 6. VERIFY: Confirm fix worked ││ → Re-profile same scenario │└─────────────────────────────────────────────────────────────┘PROFILING TOOLS:┌─────────────────────────────────────────────────────────────┐│ Unity: ││ • Memory Profiler (Package) ││ • Profiler window (Memory section) ││ • Deep Profile mode ││ ││ Unreal: ││ • Unreal Insights ││ • memreport command ││ • stat memory ││ ││ Native: ││ • Valgrind (Linux) ││ • Instruments (macOS) ││ • Visual Studio Diagnostic Tools │└─────────────────────────────────────────────────────────────┘
Asset Streaming
STREAMING STRATEGY:┌─────────────────────────────────────────────────────────────┐│ STREAMING ZONES ││ ││ [Loaded] [Loading...] [Unloaded] [Unloaded] ││ ▲ ▲ │ │ ││ │ │ │ │ ││ ──────●───────────●────────────●────────────●────── ││ Player Trigger Far Zone Very Far ││ Position ││ ││ STREAMING RULES: ││ • Load when player approaches (predictive) ││ • Unload when player far away + timeout ││ • Priority: Visible > Nearby > Background ││ • Async loading to avoid hitches │└─────────────────────────────────────────────────────────────┘
csharp
// ✅ Production-Ready: Asset Streaming Managerpublic class StreamingManager : MonoBehaviour{[SerializeField] private float loadDistance = 50f;[SerializeField] private float unloadDistance = 100f;[SerializeField] private float unloadDelay = 5f;private Dictionary<string, StreamingZone> _zones = new();private Queue<AsyncOperation> _loadQueue = new();void Update(){Vector3 playerPos = Player.Position;foreach (var zone in _zones.Values){float distance = Vector3.Distance(playerPos, zone.Center);if (distance < loadDistance && !zone.IsLoaded){StartCoroutine(LoadZoneAsync(zone));}else if (distance > unloadDistance && zone.IsLoaded){StartCoroutine(UnloadZoneDelayed(zone, unloadDelay));}}}private IEnumerator LoadZoneAsync(StreamingZone zone){zone.State = ZoneState.Loading;var operation = SceneManager.LoadSceneAsync(zone.SceneName, LoadSceneMode.Additive);operation.allowSceneActivation = false;while (operation.progress < 0.9f){yield return null;}operation.allowSceneActivation = true;zone.State = ZoneState.Loaded;}}
🔧 Troubleshooting
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/memory-management/SKILL.md
Popularity
- Installs
- 2
- Unique users
- 1
- Repository stars
- 16
- Repository forks
- 3
- 7-day trend score
- 14
Installs come from the vskill CLI. Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 17 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/pluginagentmarketplace/custom-plugin-game-developer/memory-management)Something wrong with this skill or its page? Tell us.