程序计数器、java虚拟机栈、本地方法栈,线程私有。
方法区、java堆:线程公有。
栈:保存参数、局部变量、中间计算过程和其他数据。
方法区:类信息,常量池,静态字段,方法
堆:java对象
方法区物理上存在于堆上,在堆的持久代里面;逻辑上,方法区跟堆是独立的。
jvm堆配置参数
1、-Xms 初始化堆大小 默认物理内存的1/64(<1G)
2、-Xmx最大堆大小 默认物理内存的1/4(<1G)实际应用不建议大于4G
3、一般建议设置-Xms=-Xmx,好处避免每次gc后,调整堆大小,减少系统内存分配开销
4、整个堆大小=年轻代大小+年老代大小+持久代大小
jvm新生代
1、新生代=1个eden区+2个Survivor区
2、-Xmn,新生代大小,默认为堆的3/8
3、-XX:NewRatio:新生代与年老代的比值,Xms=Xmx并且设置了Xmn的情况下,改参数不需进行设置
4、-XX:SurvivorRatio:Eden区与Survivor区大小比值,默认为8,2个S:1个E=2:8,一个Survivor区占新生代的1/10
5、新生代用来存放JMV刚分配的Java对象
jvm老年代
1、年轻代中经过垃圾回收没有回收掉的对象被复制到老年代
2、老年代存储对象比年轻带年龄大的多,而且不乏大对象
3、新建d对象也有可能直接进入老年代(大对象超过-XX:PretenureSizeThreshold=1024,直接进入老年代)
4、老年代大小无需参数配置
java持久代(方法区)
1、-XX:PermSize -XX:MaxPermSize,建议配置相同值,因为永久代大小的调整也会导致堆内存需要触发GC。
2、存放Class、Method元信息,一般设置为128M,设置原则是预留30%的空间。
3、回收方式:
常量池中的常量、无用的类信息,常量的回收很简单,没有引用就回收。
对无用的类进行回收,必须保证3点:
类的所有实例都已经被回收
加载类的ClassLoader已经被回收
类对象的Class对象没有被引用(即没有通过反射引用该类的地方)
jvm垃圾收集算法:
1、引用计数算法(JKD1.2之前)
2、根搜索算法
jvm垃圾回收算法
1、复制算法(一般用于新生代内存回收)
2、标记清除算法(适用在存活对象比较多,但会造成内存碎片)
3、标记整理压缩算法(基于标记清除算法,对对象进行移动,解决碎片问题)
并行:指两个或者多个事件在同一时刻发生。
并发:指两个或者多个事件在同一时间间隔发生。
串行回收:是指gc单线程内存回收,会暂停所有用户线程。(serial收集器是串行的)
并行回收:是指多个GC线程并行工作,但此时用户线程是暂停的。(Parallel收集器是并行的)
并发回收:是指用户线程与GC线程同时执行(不一定是并行,可能交替,但总体上是同时执行的),不需要停顿用户线程(其实在CMS收集器中用户线程还是需要停顿的,只是非常短,GC线程是在另一个CPU上执行)
JVM常见垃圾回收器:Serial、Parallel、CMS,三个又分别分新生代回收、老生代回收。
Serial回收器(串行回收器)
1、是一个单线程的收集器,只能使用一个CPU或者一条线程去完成垃圾收集;
进行垃圾收集时,必须暂停所有其他工作线程,直到收集完成。
2、缺点:Stop-The-World
3、优势:简单,对于单CPU的情况,由于没有多线程交互开销,反而可以更高效,是Client模式下默认的新生代收集器。
新生代Serial回收器
1、-XX:+UseSerialGC来开启
Serial New + Serial Old的收集器组合进行内存回收
2、使用复制算法
3、独占式的垃圾回收。
一个线程进行GC,串行。其他工作线程暂停。
老年代Serial回收器
1、-XX:+UseSerialGC来开启
Serial New + Serial Old的收集器组合进行内存回收
2、使用标记-压缩算法
3、串行的、独占式的垃圾回收器。
因为内存比较大原因,回收比新生代慢
ParNew回收器(并行回收器)
并行回收器也是独占式的回收器,在收集过程中,应用程序会全部暂停。但由于并行回收器使用多线程进行垃圾回收,因此,在并发能力比较强的CPU上,它产生的停顿时间要短于串行回收器,而在单CPU或者并发能力较弱的系统中,并行回收器的效果不会比串行回收器好,由于多线程的压力,它的实际表现很可能比串行回收器差。
新生代ParNew回收器
1、-XX:+UseParNewGC开启
新生代使用并行回收收集器,老年代使用串行收集器。
2、-XX:ParallelGCThreads指定线程数
默认最好跟CPU数量相当,避免过多的线程影响垃圾收集性能。
3、使用复制算法。
4、并行的、独占式的垃圾回收期。
新生代Parallel Scavenge回收器
1、吞吐量优先回收器
关注CPU吞吐量,即运行用户代码的时间/总时间,比如:JVM运行100分钟,其中运行用户代码99分钟,垃圾收集1分钟,则吞吐量是99%,这种收集器能最高效率的利用CPU,适合运行后台运算。
2、-XX:+UseParallelGC开启
使用Parallel Scavenge+Serial Old收集器组合回收垃圾,这也是在Server模式下的默认值。
3、-XX:GCTimeRatio
来设置用户执行时间占总时间的比例,默认99,即1%时间用来进行垃圾回收
4、-XX:MaxGCPauseMillis
设置GC的最大停顿时间
5、使用复制算法
老生代Parallel Old回收器
1、-XX:+UseParallelOldGC开启
使用Parallel Scavenge + Parallel Old组合收集器进行收集
2、使用标记整理算法
3、并行的、独占式的垃圾回收器
GC性能指标
吞吐量:应用花在非GC上的时间百分比
CG负荷:应用花在GC上的时间百分比
暂停时间:CG stop-the-world时间
GC频率
反应速度:从对象变成垃圾到被回收的时间
交互式应用:要求暂停时间越少越好
非交互式应用:要求GC负荷越低越好
实时系统:要求暂停时间、GC负荷越低越好
相关推荐
Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。本文将深入探讨JVM的工作...这本《JVM工作原理学习笔记》应包含了这些内容的详细讲解,对于学习和提升JVM相关知识极具价值。
### 深入JVM内核:原理、诊断与优化 #### 一、JVM基础知识 **1.1 JVM概念** Java虚拟机(Java Virtual Machine,简称JVM)是一种用于执行Java字节码的虚拟机。它为Java程序提供了一个运行环境,能够独立于硬件平台...
10. **性能优化**:通过分析JVM的各种监控工具(如JConsole、VisualVM等),学习如何定位性能瓶颈并进行调优,包括堆大小调整、垃圾收集器选择、JVM参数设置等。 通过阅读这本书,开发者不仅能理解JVM的基本运作...
jvm自己学习总结,对JVM的工作原理进行记录学习笔记
本文档可以作为学习JVM GC的工具书所使用,对于想深入学习JVM GC原理的同学,这一本书就足够了。因为本文档是作者花费数月时间,查阅GC相关的国内外众多资料并加以思路清晰的条目化而形成。因为篇幅所限,可能有部分...
通过以上对JVM原理和参数调优的深入学习,开发者可以更好地理解Java应用程序的运行机制,优化系统性能,解决可能出现的内存溢出、性能瓶颈等问题。本课程详细讲解了这些内容,无论你是初学者还是经验丰富的开发者,...
本资料集合包含了多个关于JVM学习的重要主题,旨在帮助读者从基础到深入地掌握JVM的工作原理和优化技巧。 1. **JVM运行机制** (2.JVM运行机制.pptx) JVM的运行机制包括类加载、字节码执行、内存管理等关键过程。类...
《深入JVM内核—原理、诊断与优化》是一份深度探索Java虚拟机(JVM)的视频教程,旨在帮助开发者全面理解JVM的工作机制,掌握性能诊断技巧,并能进行有效的优化。本教程覆盖了从基础到高级的JVM主题,不仅适用于Java...
本资料包包含了对JVM内核原理的详细探讨,以及如何进行诊断和优化的实践指导。 一、JVM内核原理 1. 类加载机制:JVM按照类加载器、双亲委派模型、验证、准备、解析、初始化等步骤加载类。了解这一过程有助于理解类...
深入理解JVM的内核原理、诊断技巧以及优化方法对于提升应用性能至关重要。本教程——“深入JVM内核—原理、诊断与优化视频教程”,将重点讲解这些关键点,帮助开发者提升技术水平,更好地解决实际问题。 首先,我们...
Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。Java的“一次编译,到处运行”的特性得益于JVM的存在。JVM是一个软件,它在不同的操作系统上都有相应的版本,如Windows、...
理解JVM的工作原理对于优化程序性能、排查问题以及深入学习Java技术至关重要。下面将详细阐述JVM的主要组件和工作流程。 1. **类加载子系统** 类加载子系统负责加载、验证、准备和初始化Java类。这个过程分为四个...
对于JVM的学习,在我看来那么几个部分最重要: · Java代码编译和执行的整个过程 · JVM内存管理及垃圾回收机制 Java代码编译和执行的整个过程包含了以下三个重要的机制: · Java源码编译机制 · 类加载机制 · ...
### Sun JVM原理与内存管理 #### 一、Sun JDK 1.6 GC (Garbage Collector) Sun JDK 1.6 的垃圾收集器(GC)是其内存管理的关键组成部分,它负责自动地回收不再使用的对象所占用的内存。本文将详细介绍Sun JDK 1.6 GC...
### JVM详解与学习 #### Java相关 ##### 1.1 Java定义 Java 是一种广泛使用的高级编程语言,具有面向对象、跨平台等特性。它的设计理念是“一次编写,到处运行”,这得益于Java虚拟机(JVM)的存在。JVM使得Java...
【JVM运行机制详解】 Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行...在《深入JVM内核—原理、诊断与优化》视频教程中,会详细讲解这些内容,并结合实际案例进行演示和实践,帮助开发者成为JVM领域的专家。
本课程笔记主要探讨了JVM的工作原理,旨在帮助读者深入理解Java程序的执行机制,提升性能优化的能力。 首先,JVM的内存模型是学习的重点之一。它包括堆内存、栈内存、方法区、程序计数器以及本地方法栈等几个关键...
JVM性学习笔记-基本原理,内存模型,JVM参数设置,类加载器原理,JDK自带工具