Use `Box
Use `Vec
Preallocate with `Vec::with_capacity`
Shrink vectors with `shrink_to_fit`
Prefer `String` only when owned text is needed
Use `&str` and slices instead of owned data when possible
Avoid cloning; pass references instead
Use `Cow<'a, T>` to avoid unnecessary allocations
Replace `HashMap` with `BTreeMap` or arrays when appropriate
Reduce key and value sizes in maps
Use smaller integer types when valid
Pack structs to reduce padding
Reorder struct fields to minimize alignment waste
Use `Option
Use `Arc
Use iterators and streaming instead of collecting everything
Process data in chunks or batches
Drop unused values early with scopes or `drop`
Avoid retaining references to large buffers longer than needed
Use `mem::take` or `std::mem::replace` to reuse allocations
Prefer `VecDeque` only when front removal is needed
Use `SmallVec` or `ArrayVec` for small fixed-size collections
Use `serde` borrowing with `&str` where possible
Disable unnecessary features and dependencies
Compile with `–release`
Use `jemalloc` or another allocator if beneficial
Profile memory with `heaptrack`, `valgrind`, or `pprof`
Remove debug data and logging buffers in production
Avoid recursive data structures when iterative alternatives work
Use arena allocation for many short-lived objects
Intern repeated strings or identifiers
Store indices instead of full objects when possible
