• Epsilon Collector: This is a Java feature that allocates memory but doesn’t deallocate it, making it suitable for short-lived processes or jobs where memory allocation is needed, but cleanup isn’t required.
  • Heap Sizing: The Epsilon collector is useful only for short-running jobs and cannot be used in regular applications that require memory reclamation. It’s an advantage over other collectors in the sense that it doesn’t add latency due to GC running in the background.
    • Heap Sizing: Throwing more hardware at a problem isn’t always the solution; there’s a law of diminishing returns (dimensioning returns).
    • Increasing heap size: Initially shows a natural increase in application throughput, but eventually, adding more memory can result in more overhead rather than increased performance.
  • Ergonomics: The JVM uses ergonomics to determine the best garbage collector and heap size based on available resources (e.g., CPU).
  • Overriding choices: You can override these choices by specifying a parallel GC or adjusting other parameters.
  • Resource utilization: If you’re running multiple applications on a single machine, it’s essential to consider resource utilization and adjust your configuration accordingly.