`
zhanghteye
  • 浏览: 51216 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jvm原理(学习)

阅读更多
jvm:虚拟机、字节码、平台无关

 

程序计数器、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负荷越低越好

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    JVM工作原理学习笔记

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

    深入jvm 内核-原理,诊断于优化视频教程

    ### 深入JVM内核:原理、诊断与优化 #### 一、JVM基础知识 **1.1 JVM概念** Java虚拟机(Java Virtual Machine,简称JVM)是一种用于执行Java字节码的虚拟机。它为Java程序提供了一个运行环境,能够独立于硬件平台...

    揭秘Java虚拟机-JVM设计原理与实现

    10. **性能优化**:通过分析JVM的各种监控工具(如JConsole、VisualVM等),学习如何定位性能瓶颈并进行调优,包括堆大小调整、垃圾收集器选择、JVM参数设置等。 通过阅读这本书,开发者不仅能理解JVM的基本运作...

    jvm自己学习总结

    jvm自己学习总结,对JVM的工作原理进行记录学习笔记

    JVM GC原理深入学习.pdf

    本文档可以作为学习JVM GC的工具书所使用,对于想深入学习JVM GC原理的同学,这一本书就足够了。因为本文档是作者花费数月时间,查阅GC相关的国内外众多资料并加以思路清晰的条目化而形成。因为篇幅所限,可能有部分...

    JAVA应用JVM原理及参数调优深入讲解视频.rar

    通过以上对JVM原理和参数调优的深入学习,开发者可以更好地理解Java应用程序的运行机制,优化系统性能,解决可能出现的内存溢出、性能瓶颈等问题。本课程详细讲解了这些内容,无论你是初学者还是经验丰富的开发者,...

    jvm虚拟机学习资料.zip

    本资料集合包含了多个关于JVM学习的重要主题,旨在帮助读者从基础到深入地掌握JVM的工作原理和优化技巧。 1. **JVM运行机制** (2.JVM运行机制.pptx) JVM的运行机制包括类加载、字节码执行、内存管理等关键过程。类...

    深入JVM内核—原理、诊断与优化

    《深入JVM内核—原理、诊断与优化》是一份深度探索Java虚拟机(JVM)的视频教程,旨在帮助开发者全面理解JVM的工作机制,掌握性能诊断技巧,并能进行有效的优化。本教程覆盖了从基础到高级的JVM主题,不仅适用于Java...

    JVM学习资料+笔记

    本资料包包含了对JVM内核原理的详细探讨,以及如何进行诊断和优化的实践指导。 一、JVM内核原理 1. 类加载机制:JVM按照类加载器、双亲委派模型、验证、准备、解析、初始化等步骤加载类。了解这一过程有助于理解类...

    深入JVM内核—原理、诊断与优化视频教程-3.常用JVM配置参数

    深入理解JVM的内核原理、诊断技巧以及优化方法对于提升应用性能至关重要。本教程——“深入JVM内核—原理、诊断与优化视频教程”,将重点讲解这些关键点,帮助开发者提升技术水平,更好地解决实际问题。 首先,我们...

    理解JVM虚拟机原理(学习资料).docx

    Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。Java的“一次编译,到处运行”的特性得益于JVM的存在。JVM是一个软件,它在不同的操作系统上都有相应的版本,如Windows、...

    JVM工作原理

    理解JVM的工作原理对于优化程序性能、排查问题以及深入学习Java技术至关重要。下面将详细阐述JVM的主要组件和工作流程。 1. **类加载子系统** 类加载子系统负责加载、验证、准备和初始化Java类。这个过程分为四个...

    JVM组成及工作原理原理

    对于JVM的学习,在我看来那么几个部分最重要: · Java代码编译和执行的整个过程 · JVM内存管理及垃圾回收机制 Java代码编译和执行的整个过程包含了以下三个重要的机制: · Java源码编译机制 · 类加载机制 · ...

    Sun JVM原理与内存管理

    ### Sun JVM原理与内存管理 #### 一、Sun JDK 1.6 GC (Garbage Collector) Sun JDK 1.6 的垃圾收集器(GC)是其内存管理的关键组成部分,它负责自动地回收不再使用的对象所占用的内存。本文将详细介绍Sun JDK 1.6 GC...

    JVM详解与学习

    ### JVM详解与学习 #### Java相关 ##### 1.1 Java定义 Java 是一种广泛使用的高级编程语言,具有面向对象、跨平台等特性。它的设计理念是“一次编写,到处运行”,这得益于Java虚拟机(JVM)的存在。JVM使得Java...

    深入JVM内核—原理、诊断与优化视频教程-2.JVM运行机制

    【JVM运行机制详解】 Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行...在《深入JVM内核—原理、诊断与优化》视频教程中,会详细讲解这些内容,并结合实际案例进行演示和实践,帮助开发者成为JVM领域的专家。

    jvm原理分析课程笔记

    本课程笔记主要探讨了JVM的工作原理,旨在帮助读者深入理解Java程序的执行机制,提升性能优化的能力。 首先,JVM的内存模型是学习的重点之一。它包括堆内存、栈内存、方法区、程序计数器以及本地方法栈等几个关键...

    JVM性学习笔记-基本原理,内存模型,JVM参数

    JVM性学习笔记-基本原理,内存模型,JVM参数设置,类加载器原理,JDK自带工具

Global site tag (gtag.js) - Google Analytics