<!--
title: minimize memory allocations
domain: runtimes
topic: Performance Optimization
language: Rust
source: denoland/deno
updated: 2025-06-05
url: https://awesomereviewers.com/reviewers/deno-minimize-memory-allocations/
-->

Identify and eliminate unnecessary memory allocations in performance-critical code paths. This includes pre-allocating collections when the size is known, using static strings for common values, and avoiding intermediate data structures.

Key strategies:
- **Pre-allocate collections**: When you know the expected size, pre-allocate vectors and hashmaps to avoid repeated reallocations
- **Use static strings**: For common values like HTTP methods, use `Cow::Borrowed` or `FastStaticString` instead of allocating new strings
- **Eliminate intermediate collections**: Avoid creating temporary data structures when you can process data in a single pass
- **Reuse attribute objects**: Cache and reuse expensive-to-create objects rather than recreating them

Example from HTTP method handling:
```rust
// Instead of always allocating:
fn method_slow(method: &http::Method) -> String {
    method.to_string()  // Always allocates
}

// Use static strings for common cases:
fn method_fast(method: &http::Method) -> Cow<'static, str> {
    match *method {
        Method::GET => Cow::Borrowed("GET"),
        Method::POST => Cow::Borrowed("POST"),
        // ... other common methods
        _ => Cow::Owned(method.to_string()),
    }
}
```

This optimization is particularly important in hot code paths where even small allocations can compound into significant performance overhead. Always measure the impact, as the complexity trade-off should be justified by measurable performance gains.
