> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Garbage Collection

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

<VersionRequirements
  versions={[
{ name: "AppSignal for Ruby", version: "3.1.4" }
]}
/>

De Ruby VM (Virtual Machine) gebruikt Garbage Collection (GC) om te voorkomen dat het procesgeheugen opraakt. Garbage Collection helpt voorkomen dat uw applicatie te kampen krijgt met geheugenproblemen door geheugentekort.

Dit proces van het opruimen van ongebruikt geheugen in Ruby-apps kan op elk moment plaatsvinden. Om hier meer inzicht in te krijgen, kunt u [Ruby's Garbage Collection profiler](https://ruby-doc.org/core/GC/Profiler.html) gebruiken.

## Profiler

<Warning>
  We raden af om de Garbage Collection profiler in productieomgevingen in te
  schakelen, in ieder geval niet voor langere perioden. De extra overhead van
  de profiler kan de prestaties van uw applicatie negatief beïnvloeden.
</Warning>

Wanneer de Ruby Garbage Collection profiler is ingeschakeld, verzamelt AppSignal automatisch metrieken voor het Ruby VM magic dashboard. De grafiek "GC time" laat zien hoe lang de Ruby VM erover deed om het ongebruikte geheugen tussen metingen op te ruimen. Deze grafiek zal pieken vertonen als deze plotseling veel meer geheugen moet verwerken, bijvoorbeeld na een geheugenintensieve taak of request. De GC-profiler is standaard uitgeschakeld, dus er worden geen metrieken in deze grafiek gerapporteerd.

Om de GC-profiler in te schakelen, voegt u de onderstaande code toe aan uw applicatie. De profiler kan op elk moment in de applicatie worden ingeschakeld, bijvoorbeeld bij opstarten of ter voorbereiding op geheugenintensieve operaties.

Zodra de GC-profiler is ingeschakeld, begint de "GC time"-grafiek na minstens twee minuten metrieken weer te geven. Deze metriek wordt gerapporteerd door ons [minutely probes](/ruby/instrumentation/minutely-probes)-systeem en er worden elke minuut nieuwe metingen gedaan.

<CodeGroup>
  ```ruby Ruby theme={null}
  GC::Profiler.enable
  ```
</CodeGroup>

Om de GC-profiler tijdelijk in te schakelen, zorgt u ervoor dat u de profiler daarna weer uitschakelt.

<CodeGroup>
  ```ruby Ruby theme={null}
  GC::Profiler.enable

  # Do memory intensive operation

  GC::Profiler.disable
  ```
</CodeGroup>

Om ervoor te zorgen dat de Ruby-gem een duur boven nul rapporteert voor de garbage collection-tijd, moet de profiler langer dan twee minuten ingeschakeld zijn. Dit is de initiële tijd die de Ruby-gem nodig heeft om de garbage collection-tijd te meten. We raden aan om GC-profiling langer dan het minimum van twee minuten ingeschakeld te laten om volledige metingen te garanderen die nodig zijn om te vergelijken en grafiek weer te geven.
