JVM基础知识和日常排查问题思路

提示:不积硅步,无以至千里

文章目录

  • 前言
  • JVM中栈和堆的区别
  • JVM中的垃圾清理机制
  • 查看JVM各个参数命令
  • 总结


前言

本文主要介绍:

  • JVM中栈和堆的区别
  • JVM中的垃圾清理机制
  • 日常工作排查JVM问题用的最多的命令

一、JVM中栈和堆的区别

  1. 功能性: 栈是用来执行程序的,放的是程序执行的逻辑,堆是用来放对象的
  2. 共享性:栈是线程私有的,堆事线程共享的
  3. 空间大小:堆的空间远远大于栈的空间
  4. 在java中一个线程就会相应有一个线程栈与之对应,这点容易理解.因为不同的线程执行的逻辑有所不同,因此需要一个独立的线程栈.而堆则是所有线程共享的.栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序)的相关信息.包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息
  5. 在java中,Main函数就是栈的起始点,也是程序的起始点

二、JVM中垃圾清理机制

        首先我们只针对堆空间的清理机制进行探讨.堆空间我们上面说到存储的是我们的对象信息.堆空间被分为了新生代(1/3)和老年代(2/3).其中新生代空间又分为了伊甸区(8/10),from区(1/10),to区(1/10).

        GC的垃圾回收机制是这样的: 当伊甸区满时,触发第一次GC,将无用的清理掉,将有用的复制到from区,年龄+1.

        当from区满时,触发第二次GC,清理伊甸区和from区,将无用的清理掉,将有用的复制到to区,年龄+1.

        当to区满时,触发第三次GC,清理伊甸区、from区、to区,将无用的清理掉,有用的放入from区,to区清空,年龄+1.

        ............如此往复

        当年龄==15时,会将有用的对象复制移到老年代区域,同时清空他们在新生代占用的空间.

        当老年代的空间也不够用了,会产生fullGC(回收整个堆内存).

        在次过程中需要注意的是,当某些对象一开始需要分配一块比较大的空间时(大于伊甸区的1/2),会直接分配到老年代区域

三、查看JVM各个参数命令

jps  #查看当前服务器java进程

jmap -heap 

 

其中的Heap configuration 表示堆内存初始化配置

MinHeapFreeRatio=40   # 对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40)


MaxHeapSize        # 对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小

NewSize = 1.0MB  # 对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小


OldSize = 4.0MB   # 对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老生代’的大小



NewRatio = 2        # 对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率


SurvivorRatio = 8   # 对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值


G1 Heap:               # 表示堆内存的使用情况, 其中capacity表示堆内存总容量,used表示已经用了多少,free表示有多少空闲


G1 Young Generation:   #  表示年轻代区域 ,其中包含Eden space(伊甸区)和Survivor space(幸存区),幸存区又分为from区和to区


G1 Old Generation:      # 表示老年代区域


总结

学到就是赚到,每天学一点.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值