0
0
Angularframework~10 mins

Unsubscribing and memory leaks in Angular - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Unsubscribing and memory leaks
Component Initialized
Subscribe to Observable
Component Uses Data
Component Destroyed
Unsubscribe from Observable
Memory Freed
No Memory Leak
Component Destroyed
Subscription Remains Active
Memory Leak Occurs
Shows how subscribing to data streams must be paired with unsubscribing when a component is destroyed to avoid memory leaks.
Execution Sample
Angular
import { Component, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs';

@Component({ selector: 'app-demo', template: '' })
export class DemoComponent implements OnDestroy {
  sub: Subscription;
  constructor() {
    this.sub = someObservable.subscribe();
  }
  ngOnDestroy() {
    this.sub.unsubscribe();
  }
}
This Angular component subscribes to an observable and unsubscribes when destroyed to prevent memory leaks.
Execution Table
StepActionSubscription StateMemory Status
1Component createdNo subscriptionNo memory used by subscription
2Subscribe to observableSubscription activeMemory allocated for subscription
3Component uses dataSubscription activeMemory in use
4Component destroyedSubscription activeMemory still allocated (potential leak)
5Unsubscribe calledSubscription closedMemory freed
6Component fully cleanedNo subscriptionNo memory leak
💡 Unsubscribe must be called on destroy to free memory and avoid leaks
Variable Tracker
VariableStartAfter Step 2After Step 5Final
subundefinedSubscription object (active)Subscription object (closed)undefined or garbage collected
Key Moments - 3 Insights
Why do we need to unsubscribe in ngOnDestroy?
Because the subscription stays active after the component is destroyed (see step 4 in execution_table), causing memory to stay allocated and leading to leaks.
What happens if we forget to unsubscribe?
The subscription remains active (step 4), so memory is not freed, which can slow down or crash the app over time.
Is unsubscribing necessary for all observables?
Not always. Some observables complete automatically, but for long-lived or infinite streams, unsubscribing is essential to prevent leaks.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the subscription state at step 4?
ASubscription closed
BSubscription active
CNo subscription
DSubscription error
💡 Hint
Check the 'Subscription State' column at step 4 in the execution_table
At which step is memory freed according to the execution_table?
AStep 5
BStep 2
CStep 4
DStep 6
💡 Hint
Look at the 'Memory Status' column to find when memory is freed
If we remove the unsubscribe call, what will happen to the memory status after component destruction?
AMemory freed immediately
BSubscription closes automatically
CMemory remains allocated causing a leak
DComponent will not destroy
💡 Hint
Refer to the exit_note and step 4 in execution_table about missing unsubscribe
Concept Snapshot
Angular components subscribing to observables must unsubscribe in ngOnDestroy.
Failing to unsubscribe keeps subscriptions active.
Active subscriptions hold memory causing leaks.
Unsubscribe frees memory and prevents leaks.
Use Subscription object and call unsubscribe() on destroy.
Full Transcript
In Angular, when a component subscribes to an observable, it creates a subscription that holds resources in memory. If the component is destroyed but the subscription is not unsubscribed, the subscription stays active, causing memory to remain allocated. This leads to memory leaks which can degrade app performance. To prevent this, Angular components implement the ngOnDestroy lifecycle hook where they call unsubscribe() on their subscriptions. This closes the subscription and frees memory. The execution table shows the subscription state and memory status step-by-step, highlighting the importance of unsubscribing. Beginners often confuse when to unsubscribe and why it matters. Remember, unsubscribing is essential for long-lived observables to keep your app healthy and fast.