如何理解GCRoots?

为了解决引用计数法的循环引用问题,Java使用了可达性分析的方法。GC Roots是一组活跃的引用,通过一系列名为GC Roots的对象作为起始点,沿着该对象向下搜索,如果一个对象到GC Roots没有任何引用链相连,则说明对象不可用。

哪些可以作为GC Roots的对象?

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象
  2. 方法区的类静态属性引用的对象
  3. 方法区中常量引用的对象
  4. 本地方法栈中JNI(Java本地接口)(native方法)中引用的对象

JVM的参数类型

参数的三大类型

标配参数:java -version、java -help

X参数(了解):

  • -Xint:解释执行。在解释模式(interpreted mode)下,-Xint标记会强制JVM执行所有的字节码,当然这会降低运行速度,通常低10倍或更多。
  • -Xcomp:第一次使用就编译成本地代码,与(-Xint)正好相反,JVM在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化。很多应用在使用-Xcomp也会有一些性能损失,当然这比使用-Xint损失的少,原因是-xcomp没有让JVM启用JIT编译器的全部功能。JIT编译器可以对是否需要编译做判断,如果所有代码都进行编译的话,对于一些只执行一次的代码就没有意义。
  • -Xmixed:混合模式,将解释模式与编译模式进行混合使用,由jvm自己决定,这是jvm默认的模式,也是推荐使用的模式。

XX参数:

  • Boolean类型:【-XX:+/- 某个参数值】+表示开启,-表示关闭
  • Key-Value类型:【-XX:key=value】例如:-XX:MetaspaceSize=128m、-XX:MaxTenuringThreshold=15
  • jinfo类型:查看当前运行程序的配置

如何查询参数配置?

查看运行中的Java程序某个JVM参数值是否开启及具体值:

  • jps:查看后来进程
  • jinfo:查看当前运行程序的配置。【jinfo -flag + 需要查询的参数信息 + 进程号】/【jinfo -flags】

如上图所示,【jps -l】 获得正在运行的java进程的进程号,【jinfo -flag + 需要查询的参数信息 + 进程号】,得到-XX参数的配置结果,参数名称前面是 - 号,表示没有开启。

对于Key-Value类型的XX参数,如果没有显式的配置,则查询到的结果则是JVM的默认配置值。

Command line是手动配置项,Non -default VM flags是JVM默认没有修改过的项。

-Xms和-Xmx是属于那一类呢?

-Xms和-Xmx实际上是-XX类的参数,-Xms和-Xmx其实是别名。

-Xms等价于 -XX: InitialHeapSize【初始值是物理内存的1/64】

-Xmx等价于 -XX: MaxHeapSize【初始值是物理内存的1/4】

查询参数的其他命令

java -XX:+PrintFlagsInitial :查看JVM的参数的初始配置。

java -XX:+PrintFlagsFinal -version:查看修改过的参数配置。【=没有修改过,:=修改过】

java -XX:+PrintFlagsFinal -XX:MetaspaceSize=256m 运行的类名 :运行java命令的同时打印参数

java -XX:+PrintCommandLineFlags -version:打印HotSpotVM 采用的自动优化参数

JVM常用基本配置参数

  • -Xms:初始大小内存,物理内存的1/64,等价于-XX:IntialHeapSize
  • -Xmx:最大分配内存,物理内存的1/4,等价于-XX:MaxHeapSize
  • -Xss:设置单个线程栈的大小,一般默认为512KB~1024KB,等价于-XX:ThreadStackSize
  • -Xmn:设置年轻代的大小,默认堆内存的1/3
  • -XX:MetaspaceSize:设置元空间大小。元空间的本质和永久代类似,都是对JVM规范中的方法区的实现,二者区别在于元空间不再虚拟机中,而是在本地内存中。所以默认情况下,元空间的大小仅受本地内存限制。一般只取出20多MB,可以自已调大一些。
  • -XX:+PrintGCDetails:打印GC日志
  • -XX:SurvivorRatio:设置年轻代eden/s0/s1的空间比例。默认值是8,也就是8:1:1,如果是4,就是4:1:1。
  • -XX:NewRatio:设置年轻代和老年代在堆中的占比。默认值是2,也就是新生代1老年代2,如果是4,就是新生代1老年代4,老年代占堆的4/5
  • -XX:MaxTenuringThreshold:设置进入老年代的最大年龄(在年轻代复制交换的次数),默认15次。只能设置为0~15之间。

每个Java线程都有两个堆栈:一个用于Java代码,一个用于本机代码。主线程的最大本机堆栈大小由本机应用程序启动器(例如,shell或操作系统)确定。对于后续线程,最大本机堆栈大小由该-Xss选项设置,尽管这可由基础操作系统忽略。-Xss的默认值为0,表示该值实际上是由本机环境设置的。

【JVM】GCRoots和JVM的参数配置的更多相关文章

  1. jvm调优具体参数配置

    3.JVM参数 在JVM启动参数中,可以设置跟内存.垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能.通过设置 ...

  2. JVM参数配置

    JVM参数配置 设置堆大小 -Xms 初始堆大小 -Xmx 最大堆大小 -Xmn 设置年轻代大小 设置每个线程堆栈大小 -Xss 设置每个线程的堆栈大小 设置年轻代大小 -XX:NewSize= -X ...

  3. JVM相关参数配置和问题诊断<转>

    原文连接:http://blog.csdn.net/chjttony/article/details/6240457 1.Websphere JVM相关问题诊断: 由JVM引起的Websphere问题 ...

  4. JAVA JVM常见内存参数配置简析

    JVM常见内存参数配置简析   常见参数 -Xms .-Xmx.-XX:newSize.-XX:MaxnewSize.-Xmn(-XX:newSize.-XX:MaxnewSize) 简析 1.-Xm ...

  5. JVM参数配置 java内存区域

    java内存区域 一些基本概念 http://www.importnew.com/18694.html https://www.cnblogs.com/wangyayun/p/6557851.html ...

  6. Java虚拟机-JVM各种参数配置大全详细

      usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K ...

  7. 查看Java JVM参数配置信息命令

    查看Java JVM参数配置信息命令 java -XX:+PrintCommandLineFlags jvm运行时状态的参数,可以很快找出问题所在.现在把几个命令记录一下:1. jstat这个命令对于 ...

  8. 【JVM】参数配置

    [一]JVM参数配置释意 编号 配置项 例子 含义 备注 1 -Xmx -Xmx20m java应用最大可用内存为20M  整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小.持久代一般固 ...

  9. 一个性能较好的JVM参数配置

    一个性能较好的web服务器jvm参数配置: -server//服务器模式-Xmx2g //JVM最大允许分配的堆内存,按需分配-Xms2g //JVM初始分配的堆内存,一般和Xmx配置成一样以避免每次 ...

随机推荐

  1. 线段树 B数据结构 牛客练习赛28

    链接:https://ac.nowcoder.com/acm/contest/200/B来源:牛客网 题目描述 qn姐姐最好了~     qn姐姐给你了一个长度为n的序列还有m次操作让你玩,     ...

  2. 模块_os模块

    import os print(os.getcwd()) # 获取当前工作目录 print(os.listdir()) # 列表列出当前目录下的目录名和文件名 os.mkdir("tempd ...

  3. QML文字灰飞烟灭效果

    QML文字灰飞烟灭效果 1,目的 实现文字化作一缕青烟随风而逝的效果. 2,设计分析 在前面的章节中讲述了如何化作光斑碎片逐渐消失的效果,我们可以借鉴它将光斑换成烟雾,再加入端流产生微风浮动,加上字幕 ...

  4. Android广播机制(2)

    目录 发送自定义广播 发送标准广播 步骤 跨进程广播 步骤 发送有序广播 使用本地广播 实例 本地广播的优势 发送自定义广播 发送标准广播 步骤 1.定义一个广播接收器来接收此广播,新建MyBroad ...

  5. Linux 面试最常问的十个问题

    如果你要去面试一个Linux系统运维工程师的职位,下面这十个最常见的问题一定要会,否则你的面试可能就危险了.这些都是比较基本的问题,大家要理解,不能光死记硬背. 1.如何查看系统内核的版本 这里有两种 ...

  6. Centos最小安装

    网络配置 虚拟机安装使用的NAT模式 #enoXXX 为自己的网卡名称, 使用ip addr 可以查看 将/etc/sysconfig/network-scripts/ifcfg-enoXXX中的ON ...

  7. 800+Java后端经典面试题,希望你找到自己理想的Offer呀~

    前言 在茫茫的互联网海洋中寻寻觅觅,我收藏了800+道Java经典面试题,分享给你们.建议大家收藏起来,在茶余饭后拿出来读一读,以备未雨绸缪之需.另外,面试题答案的话,我打算后面慢慢完善在github ...

  8. 用项目强化你的webpack

    用你的webpack实现vue-cli 本文围绕前端工程化,用webpack从零搭建一个完整项目的过程 本文核心知识点: webpack的使用 vue组件化思想 Element-UI的使用 别走别走, ...

  9. Python中内置函数

    python提供了很多的内置函数,这些内置的函数在某些情况下,可以起到很大的作用,而不需要专门去 写函数实现XX功能,直接使用内置函数就可以实现,下面分别来学习内置函数的使用和案例代码. abs(), ...

  10. python机器学习(三)分类算法-朴素贝叶斯

    一.概率基础 概率定义:概率定义为一件事情发生的可能性,例如,随机抛硬币,正面朝上的概率. 联合概率:包含多个条件,且所有条件同时成立的概率,记作: