`

JVM学习笔记【原创】

阅读更多
JVM 堆分为 年轻代,年老代,持久代。
年轻代:产生和回收对象的区域,分为1个Eden和2个Survivor(from 和 to)。
年老代:生命周期较长的对象
持久代:类、方法等

JVM GC 机制
1. 对象总是产生于Eden.
2. 当Eden满时触发GC,将存活的对象复制到其中一个Survivor(from).将不存活的对象回收。
3. 当Survivor(from)满时,将survivor(from)中存活的对象复制到survivor(to)中。这时survivor(from)清空,变成survivor(to)。原survivor(to)变survivor(from)。可以看出survivor(to)永远保持空的。
4. Survivor(from) -> Survivor(to) 每迁移一次,年龄+1.
5. 当年龄达到 -XX:MaxTenuringThreshold 时, 将被移到年老代。

JVM参数
-Xmx:最大内存数
-Xms:初始内存数
-Xmn:年轻代大小
-Xss:每个线程堆栈大小
-XX:NewRatio: 年轻代与年老代比例 3表示(年轻代:年老代=1:3)
-XX:SurvivorRatio:单个survivor与Eden比例 3表示(survivor:Eden=2:3)
-XX:MaxPermSize:持久代大小

JVM 回收器 类型

1.串行回收器:只适合较少的数据。
-XX:+UseSerialGC

2.并行回收器:吞吐量优先。
-XX:+UseParallelGC(年轻代选择并行回收器) 
-XX:+UseParallelOldGC(年老代选择并行回收器)
-XX:ParallelGCThreads=20(并行线程数,与处理器数目相等)
-XX:MaxGCPauseMillis=100(设置年轻代最长回收时间)
-XX:+UseAdaptiveSizePolicy(自动调整年轻代大小,以满足回收最长时间和频率)

3.并发回收器:响应时间优先。
-XX:+UseConcMarkSweepGC(年老代选择并发回收器)
-XX:+UseParNewGC(年轻代选择并发回收器)
-XX:CMSFullGCsBeforeCompaction(设置并发回收多少次后进行内存压缩整理)
-XX:+UseCMSCompactAtFullCollection(打开对年老代的压缩。可能会影响性能)
-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况

4.JVM GC 日志打印
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间
-XX:+PrintHeapAtGC:打印GC前后的详细堆栈信息
-Xloggc:filename:记录日志文件


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    JVM学习笔记(一)

    ### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

    java之jvm学习笔记五(实践写自己的类装载器)

    这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...

    JVM学习笔记

    ### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...

    java之jvm学习笔记十一(访问控制器)-源码

    本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...

    JVM学习笔记.docx

    本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...

    JVM学习笔记(缓慢更新).md

    JVM学习笔记(缓慢更新).md

    马士兵jvm调优笔记.docx

    ### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...

    jVM学习笔记.ppt

    JVM的学习可以从其基本结构、代码编译和执行过程,以及内存管理和垃圾回收机制三个方面进行深入探讨。 首先,JVM的基本结构分为逻辑结构和物理结构。逻辑结构主要包括Java源码编译器、JVM执行引擎、类加载器等组件...

    JVM学习笔记2018-4-151

    本篇JVM学习笔记主要关注对象声明、相关内存分配方法以及虚拟内存的物理和虚拟寻址概念。 首先,我们来看对象声明。在Java中,对象是在堆上创建的。例如,`CHeapObj` 类展示了如何在C++中模拟Java对象在堆上的分配...

    JVM 学习笔记(Java虚拟机)

    **JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...

    jvm学习笔记.zip

    《深入理解JVM:垃圾回收与优化》 在Java编程领域,JVM(Java Virtual Machine)扮演着至关重要的角色,它是Java程序...开发者需要不断学习和实践,才能在实际项目中有效地配置和优化JVM,确保程序的高效稳定运行。

    jvm视频及笔记

    "jvm视频及笔记"这个资源显然是一份全面学习JVM的材料,结合了视频教程和书面笔记,帮助学习者深入理解JVM的工作原理及其在实际开发中的应用。 JVM的学习可以从以下几个重要的知识点开始: 1. **JVM架构**:JVM...

    JVM学习笔记核心知识点整理

    ### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...

    JVM学习资料+笔记

    这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...

    jvm中篇笔记.md

    ### JVM中篇笔记知识点 #### 一、Class 文件结构 ##### 1. 概述 - **字节码文件的跨平台性** - Java 的跨平台性体现在 "Write Once, Run Anywhere" (WORA),即一次编写,到处运行。Java 语言编写的源代码在编译...

    JVM 学习笔记

    NULL 博文链接:https://cooldatabase.iteye.com/blog/634599

    JVM工作原理学习笔记

    Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。本文将深入探讨JVM的工作...这本《JVM工作原理学习笔记》应包含了这些内容的详细讲解,对于学习和提升JVM相关知识极具价值。

    java之jvm学习笔记十一(访问控制器) -源码

    本文将深入探讨JVM中的访问控制器,并通过分析"java之jvm学习笔记十一(访问控制器) -源码"中的`MySecurityManager`来进一步理解其工作原理。 访问控制器的主要任务是对类、方法和字段的访问进行限制,防止恶意代码...

    jvm学习笔记

    《JVM学习笔记》 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行所有的Java应用程序。这篇笔记将深入探讨JVM的工作原理、内存管理、类加载机制以及优化策略,帮助读者全面理解JVM并提升Java程序的性能。 ...

    jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)

    在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...

Global site tag (gtag.js) - Google Analytics