What are the main JVM memory areas, and which are shared vs per-thread?
Reviewed by Gurusankar M.
Short Answer
Shared across threads: Heap (objects) and Metaspace (class metadata). Per-thread: the JVM Stack (frames, locals), PC register, and native method stack. Most OutOfMemory issues are Heap or Metaspace; StackOverflowError is the per-thread stack.
On this page
Concept Made Simple
Coffee Chat Question
“What are the main JVM memory areas, and which are shared vs per-thread?”
Remember It Faster
Mind Map Answer
- Heap (shared)
- all objects + arrays
- Metaspace (shared)
- class metadata (native mem)
- Stack (per-thread)
- frames, locals, partial results
- PC / native stack
- per-thread bookkeeping
Think Beyond the Expected
What If?
Deep recursion throws StackOverflowError but the heap is fine — which area, and the fix?
That's the per-thread JVM stack overflowing (too many frames). Fix the recursion (add a base case / convert to iteration) or, rarely, raise -Xss. It's unrelated to heap size — bumping -Xmx won't help.
Real World
Knowing which area is exhausted routes the fix: Heap OOM → leak/sizing, Metaspace OOM → classloader leak/too many classes, StackOverflow → recursion. Misdiagnosing wastes incident time.
Interviewer's Expectation
Keywords they're listening for:
- heap & metaspace shared
- stack/PC per-thread
- StackOverflow vs OOM
- metaspace is native memory
Common Mistakes
- Raising -Xmx for a StackOverflowError
- Thinking Metaspace is part of the heap
- Ignoring per-thread stack cost when creating many threads
Best Practices
- Match the fix to the exhausted area
- Bound recursion; prefer iteration for deep structures
- Monitor both heap and metaspace
Follow-up Questions
- Where do String literals and static fields live?
- Why did PermGen become Metaspace?
- What does -Xss control?
Continue Learning with AI
Take this question deeper with your favourite AI assistant. Pick a depth, copy the prompt, or open it directly — AI is your learning companion, not a shortcut.
Plain-language foundations
I'm preparing for a software engineering interview and want to understand this from scratch, as a beginner. Topic: Memory Areas (JVM) Interview question: "What are the main JVM memory areas, and which are shared vs per-thread?" Please: 1. Explain the core idea in simple, plain language, using an everyday analogy. 2. Define any technical terms you use. 3. Walk through one small, concrete example. 4. Finish with a single sentence I can easily remember. Keep the tone friendly and assume I'm new to this topic.
Was this answer helpful?
Affiliate links
Tools for Your Developer Workspace
Equipment for a comfortable, productive setup.
As an Amazon Associate I earn from qualifying purchases.
- MonitorView on Amazon : BenQ EW2790U 27-inch Monitor (opens in a new tab)
BenQ EW2790U 27-inch Monitor
- LaptopView on Amazon : Acer Aspire One Laptop (opens in a new tab)
Acer Aspire One Laptop
- Office ChairView on Amazon : Wakefit Gravita Ergonomic Office Chair (opens in a new tab)
Wakefit Gravita Ergonomic Office Chair