### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及本地方法栈(Native Method Stack)。 - **堆内存**:是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。 - **新生代**:主要用来存放生命周期较短的对象。根据“大部分对象很快死亡”的原则,新生代采用了复制算法来提高垃圾收集的效率。新生代又细分为一个Eden区和两个Survivor区(S0、S1),默认比例为8:1:1。 - **Eden区**:所有新创建的对象首先都是在这里分配。 - **Survivor区**:当Eden区满后,还存活的对象会被移动到Survivor区之一。 - **老年代**:存放的是生命周期较长的对象。当对象在Survivor区中经历了若干次GC后仍然存活,则会被转移到老年代。 - **栈**:每个线程私有的内存区域,用于存储局部变量等数据。每当线程执行一个新的方法时,虚拟机会为该方法创建一个新的栈帧,并将其压入栈顶;当方法执行完毕后,该栈帧将被弹出栈。 #### 二、垃圾收集算法 垃圾收集算法主要用于释放那些不再使用的对象所占用的内存,从而避免内存泄漏问题。主要包括以下几种: - **标记-清除算法**(Mark-Sweep):首先标记所有需要回收的对象,然后统一回收这些标记过的对象。该算法的缺点是会导致内存碎片化。 - **复制算法**(Copying):将内存分为大小相等的两块,每次只使用其中一块,在垃圾回收时,将还活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。这种算法适用于新生代,因为每次回收都有大量对象死亡。 - **标记-压缩算法**(Mark-Compact):标记过程同标记-清除算法,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。解决了标记-清除算法中的碎片问题。 #### 三、JVM参数 为了更好地控制Java虚拟机的行为,可以设置一系列JVM参数来优化性能。这些参数可以分为几类: - **标准参数**:所有JVM实现都支持的标准配置选项。 - **非标参数(-X)**:某些特定JVM实现提供的扩展配置选项。 - **不稳定参数(-XX)**:实验性参数,可能会在未来的JVM版本中被移除。 具体的参数示例包括: - `-XX:PermSize`:设置永久代初始大小。 - `-XX:MaxPermSize`:设置永久代最大大小。 - `-XX:+PrintGC`:打印GC日志信息。 - `-XX:+AggressiveOpts`:启用更激进的优化策略。 - `-XX:+UseBiasedLocking`:启用偏向锁。 #### 四、JVM的垃圾回收集器 不同的垃圾回收集器针对不同的应用场景进行了优化: - **Serial Collector**:单线程的垃圾回收器,适合于单核处理器的环境。 - **Parallel Collector**:多线程的垃圾回收器,适用于具有多个处理器的服务器系统,能充分利用多核处理器的优势。 - **CMS Collector**:以最短回收停顿时间为目标的垃圾回收器,非常适合Web服务器或B/S系统。 - **G1 Collector**:一种面向服务端应用的垃圾回收器,能够实现低延迟的同时处理大量的数据。 #### 五、常用参数设置 - **栈上分配**:将小对象直接分配在栈上,减少了对象分配的开销。可以通过参数`-XX:+UseTLAB`开启线程本地分配缓冲区,提高多线程环境下对象分配的速度。 - **线程本地分配TSAB**:通过为每个线程分配一个线程本地的分配缓冲区(Thread Local Allocation Buffer),减少多线程场景下的竞争。 - **常用参数设置**: - `-XX:-DoEscapeAnalysis`:禁用逃逸分析。 - `-XX:-EliminateAllocations`:禁用对象分配优化。 - `-XX:-UserTLAB`:禁用线程本地分配缓冲区。 - `-XX:+PrintGC`:打印垃圾收集信息。 以上是基于《马士兵JVM调优笔记》文档内容整理的关键知识点总结。通过理解和掌握这些概念与技巧,可以帮助开发者更高效地管理和优化Java应用程序的内存使用情况。












剩余9页未读,继续阅读

- zhuhuixiu2023-08-22随堂笔记也好意思拿出来,记得啥玩意
- wenzhiyinghen2021-04-30看好马士兵
- IT农夫2020-06-22文档及其不完整

- 粉丝: 86
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- zibbs开源php轻论坛,Bootstrap论坛-PHP资源
- Javascript-JavaScript资源
- ERD-ONLINE-SQL资源
- Friday-毕业设计资源
- 蓝桥杯单片机真题代码-蓝桥杯资源
- asmeg-汇编语言资源
- northstar-Java资源
- DrissionPage-Python资源
- zkClient4Swift-Swift资源
- matlab-Matlab资源
- zzrobot_ws-机器人开发资源
- acp-Kotlin资源
- vectorize-mcp-server-AI人工智能资源
- litemall-移动应用开发资源
- STC51-单片机开发资源
- vue-vben-admin-Typescript资源


