注:Virtual 表示已申请,但未真正使用的内存区域(最小堆容量(Xms)不等于最大堆容量(Xmx)时会出现该现象)
1. 程序计数器
PC,Program Counter Register
- 存放线程当前所执行方法的指令地址
- 如果当前执行的是本地方法,而非 Java方法,则为 undefined (未指定值)
- 每个Java线程都有一个程序计数器
- 任何时间,一个线程只有一个方法在执行——当前方法
2. Java虚拟机栈
- 每个Java线程都有一个 Java虚拟机栈
- 栈中每个单元——栈帧——对应一次Java方法调用
- 与程序计数器对应,任何时间点,一个栈只有一个活动的栈帧——当前栈帧
- 执行新方法时,创建新的栈帧并入栈;方法结束时,对应的栈帧出栈
- 栈帧存放:局部变量表、操作数栈(operand)、动态链接、方法退出的定义(正常退出或异常退出)
3. 本地方法栈
- 与Java虚拟机栈类似
- 用于支持本地方法的调用
- 每个线程都有一个本地方法栈
- Oracle Hotspot JVM 中,本地方法栈 与 Java虚拟机栈 是同一片区域
4. 堆
- 存放 Java对象实例
- Oracle Hotspot JVM 会将所有 Java对象都存放在堆中
- Intern 字符串缓存 和 静态变量 都存放在堆中 (Oracle JDK 8)
- 所有线程共享堆
- 除了TLAB,Thread Local Allocation Buffer。这是大部分JVM具体实现的一个设计
- 垃圾收集器(GC)不同,堆的具体划分方式也不同
- 本文主要涉及JDK8的典型设置
4.1 新生代
大部分对象会在该区域创建、销毁。
4.1.1 Eden
对象一般会先被创建分配在Eden区
4.1.1.1 TLAB, Thread Local Allocation Buffer
这是Eden的一部分。每个线程都有一个TLAB,供其缓存数据。
这样可以减少多线程场景中,分配内存是需要加锁的开销。
4.1.2 Survivor
用来放 Minor GC后存活的对象。
两个Survivor区,一个 from,一个 to。GC过程中,Eden存活的对象和 from区的对象会被复制到 to区;to区就成了下一次GC的 from区,原 from区则成为 to区。
这样便于整理内存,防止内存碎片化。
4.2 老年代
一般存放从Survivor 区存活的对象
对象分配的一般逻辑
- 普通对象一般分配在TLAB上;
- 如果对象较大,会被分配到Eden的其它位置;
- 如果对象太大,新生代放不下,就会被分配到老年代
相关推荐
本书可能会深入探讨JVM的架构、内存区域划分、垃圾回收机制(GC)等主题,并提供一些调优技巧。 ### Java标准库与工具 除了上述技术点外,本书还可能包括对Java标准库的介绍,比如日期时间API、正则表达式、Swing/...
3. **JVM内存区域划分.pdf**:Java虚拟机(JVM)是Java程序运行的平台,理解其内存模型至关重要。文件将详细介绍堆、栈、方法区、本地方法栈和程序计数器等区域,以及垃圾回收机制,有助于解决内存溢出和性能瓶颈...
为了在Java领域进一步提升,了解和掌握Java进阶的核心知识至关重要。本文将深入探讨JVM(Java虚拟机),这是Java程序运行的基础,也是面试中经常考察的重点。 **JVM(Java虚拟机)** JVM是Java平台的核心组成部分...
综上所述,Java面试中关于JVM的基础和进阶知识点涵盖了从JVM配置、类加载机制、内存管理到垃圾回收等多个方面。深入理解这些内容不仅有助于提高面试成功率,也能更好地应对实际开发中的性能调优等问题。
JVM负责在程序运行时管理内存分配与回收,它在运行Java程序时会划分几个不同的内存区域,如堆(Heap)、栈(Stack)、方法区(Method Area)和本地方法栈(Native Method Stacks)。堆是JVM所管理的内存中最大的一块...
1. **内存区域划分** - **JVM内存模型**:理解程序计数器、堆、虚拟机栈、本地方法栈、方法区(Java 8中被Metaspace取代)的作用。 - **堆内存**:掌握新生代(包含Eden区、Survivor1区、Survivor2区)和老年代的...
9. **垃圾回收与内存管理**:理解JVM的工作原理,包括内存区域划分、垃圾回收机制、性能调优等,对于优化程序性能至关重要。 10. **泛型**:泛型的使用和限制,以及如何利用泛型提高代码的类型安全性和重用性。 11...
标题为《2020年最新Java核心知识点整理》,描述为对Java基础到进阶的全部学习资料进行整理,这些内容旨在提供给Java学习者,帮助他们系统性地掌握Java编程。文件还特别提到了JVM(Java虚拟机)以及GC(垃圾回收)等...
JVM内存区域划分 **程序计数器(Program Counter Register)**:每个线程都有一个独立的程序计数器,它保存着当前线程正在执行的字节码的行号指示器。这个区域是唯一一个在Java虚拟机规范中没有规定任何内存溢出错误...
学习源码还可以深入了解JVM的工作原理,如垃圾回收机制、内存区域划分等,有助于优化程序性能。 总之,"java-learn-源码.rar"提供了丰富的Java学习资源,涵盖了从基础到进阶的多个层面,对于希望深入理解Java编程...
- **JVM相关**:了解JVM内存模型,理解堆、栈、方法区等区域的划分,以及垃圾回收机制。 - **并发编程**:讨论线程安全问题,如死锁、活锁、饥饿状态,以及如何避免这些问题。 - **Spring框架**:理解IoC和AOP...
- **内存区域划分**:堆、栈、方法区、程序计数器等。 - **垃圾回收算法**:标记-清除算法、复制算法、标记-整理算法等。 #### 三、Java高级篇 **3.1 泛型** - **泛型类和泛型方法**:使用定义泛型类型。 - **...
书中会涉及类加载机制、垃圾回收、内存区域划分等内容。 10. **异常处理**:Java的异常处理机制有助于捕获和处理程序运行时的错误,保证程序的健壮性。书中会介绍如何正确使用try-catch-finally语句块以及自定义...
这包括类加载的双亲委派模型,以及JVM内存区域的划分,如堆、栈、方法区、本地方法栈等。 3. **常用JVM配置参数**:详细介绍了JVM启动时可以使用的各种参数,如-Xms、-Xmx用于设置堆内存大小,-XX:MaxPermSize设置...
本书首先会介绍JVM的基本结构和工作原理,包括类加载机制、内存区域划分、字节码执行引擎等基础知识。接着,会深入探讨JVM的内存管理,特别是垃圾收集算法和内存调优策略,这对于理解和优化大型Java应用的性能至关...
理解这些内存区域的划分和交互,对于避免内存溢出和性能瓶颈至关重要。 其次,书中深入剖析了类加载机制,包括类加载器的层次结构、双亲委托模型以及类加载的时机。了解这些内容有助于我们进行更精细的类管理,比如...
这包括对volatile变量的定义、线程同步(synchronized关键字)以及JVM内存区域的划分。 6. **Java虚拟机(JVM)**:虽然JLS主要关注语言层面,但JVM规范也是理解Java运行时环境的关键。JVM负责解释执行字节码、垃圾...
- JVM的内存区域划分:堆内存、栈内存、方法区等。 - 内存溢出与内存泄漏的区别。 5. **垃圾回收机制**: - 垃圾回收算法(标记-清除、复制算法、分代收集等)。 - GC根节点可达性分析算法。 6. **性能优化**...
- **内存区域**:JVM内存主要分为堆内存和非堆内存两大部分。堆内存用于存储对象实例和数组;非堆内存包括方法区、程序计数器、本地方法栈和虚拟机栈等。 - **垃圾回收算法**:常见的垃圾回收算法包括标记-清除算法...
1. **JVM内存模型**:理解堆、栈、方法区、本地方法栈等区域的划分及其作用。 2. **垃圾回收机制**:包括垃圾收集器的工作原理,内存分配与回收策略。 3. **并发编程**:深入理解线程池,原子性操作(Atomic类),...