JVM优化[通俗易懂]

JVM优化[通俗易懂]为什么要进行JVM优化?在本地开发环境中我们很少有需求对JVM进行优化,但是到了生产环境我们的程序可能出现如下问题:运行的引用“卡住了”,日志不输出,程序没反应服务器的CPU负载突然升高在多线程应用下,如何合理的分配线程的数量。。。。。。。。。通过Java-server和java-client设置JVM的运行参数serverVM的初始堆空间会大一些,默认使用的是并行垃圾回…

大家好,又见面了,我是你们的朋友全栈君。

为什么要进行JVM优化?

在本地开发环境中我们很少有需求对JVM进行优化,但是到了生产环境我们的程序可能出现如下问题:

  • 运行的引用“卡住了”,日志不输出,程序没反应
  • 服务器的CPU负载突然升高
  • 在多线程应用下,如何合理的分配线程的数量
  • 。。。。。。。。。

通过Java -server和java -client设置JVM的运行参数

  • server VM的初始堆空间会大一些,默认使用的是并行垃圾回收器,启动慢运行快
  • client VM初始堆空间相对较小,使用串行垃圾回收器,他的目标是为了让JVM的启动速度更快,但是运行速度相对较慢。
  • JVM在启动时会根据硬件和操作系统自动选择运行哪种类型的JVM。
    • 32位操作系统:
      • 如果是Windows操作系统,无论硬件如何都会使用client类型的jvm;
      • 如果是其他操作系统;如果内存在2G以上并且有2个以上CPU使用server类型,否则使用client类型
    • 64位:
      • 只有server,不支持client;
        在这里插入图片描述
        在这里插入图片描述

JVM运行参数-xint、-Xcomp、-Xmixed

-X参数
在这里插入图片描述

-Xint、Xcomp、-Xmixed

  • 在解释模式下,-Xint标记会强制JVM执行所有的字节码,会降低运行速度,通常低10倍或者更多。
  • -Xcomp参数与-Xint相反,它会使JVM在第一次使用时把所有的字节码编译成本地代码,从而带来最大程度的优化。
    • 而很多应用在使用-Xcomp也会有一些性能损失,但是比使用-Xint损失少,原因是-Xcomp没有让JVM启动JIT编译器的全部功能。JIT编译器可以对是否需要编译做判断,如果所有代码都进行编译的话,对于一些只执行一次的代码就没有意义了。
  • -Xmixed是混合模式,将解释模式预编译模式进行混合使用,由JVM自己决定
    ,这是JVM默认的模式,也是瑞建使用的模式。
  • 演示:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

-XX参数

  • -XX参数也是非标准参数,主要用于JVM调优和debug操作;
  • 两种类型:boolean类型;非boolean类型;
    • boolean类型
      • 格式:-XX:[±] 表示启用(+)或禁用(-)属性;
        • 如:-XX:+DisableExplicitGC 表示禁用手动调用gc操作
    • 非boolean类型
      • 格式:-XX=表示属性的值为
        • 如:-XX:NewRatio=1表示新生代和老年代的比值
          用法:
          在这里插入图片描述

-Xms与-Xmx参数

  • -Xms:JVM的堆内存的初始值大小;
    • -Xms512m:等价于-XX:InitalHeapSize,设置JVM初始堆内存为512m;
  • -Xmx:JVM的堆内存的最大大小;
    • -Xmx2048m:等价于-XX:MaxHeapsSize,设置JVM最大堆内存为2048m;
      演示:
      在这里插入图片描述

查看JVM的运行参数

  • 运行java命令时打印参数:添加-XX:+PrintFlagsFinal参数
  • 演示:
    参数过多截取部分!
    参数有boolean类型和数字类型,值的操作符是=或:=,分别代表默认值和被修改的值
    演示:
    在这里插入图片描述

查看正在运行的jvm参数

  • 启动一个tomcat用于测试
  • 访问成功后:
    在这里插入图片描述
    在这里插入图片描述

JVM内存模型

JDK1.7:

在这里插入图片描述
在这里插入图片描述

JDK1.8:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JDK1.7与1.8堆内存模型差异

  • 1.7原有的永久区被废除,取而代之的是1.8中的MetaSpace(元空间)
    • 废除是为了融合HotSpot JVM与JRockit VM
    • 现实使用中,由于永久代内存经常不够用或发生内存泄漏,爆出异常OutOfMemooryError,基于此,将永久废除,而改用元空间代替,改了是为了使用本地空间。

通过jstat命令查看堆内存的使用情况

  • 查看class加载统计
    在这里插入图片描述
    • loaded:加载class的数量
    • Bytes:所占用的空间
    • UNloaded:未加载数量
    • Bytes:未加载占用空间
    • Time:时间
  • 查看编译统计
    在这里插入图片描述
    • Compiled:编译数量
    • Failed:失败数量
    • Invalid:不可用数量
    • Time:时间
    • FailedType:失败类型
    • failedMethod:失败方法
  • 垃圾回收统计
    在这里插入图片描述
    在这里插入图片描述

jmap的使用以及内存溢出分析

  • 查看内存使用情况
    在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130518.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 智能家居,如何离我们有多远?

    智能家居,如何离我们有多远?

    2022年1月4日
  • ASMX

    ASMX当Microsoft®.NETFramework第一次发布时,它引入了一个有突破性的Web服务框架,那就是ASMX。设计ASMX的目的在于尽可能地简化Web服务的开发过程,这样即使您不是XML专家,也可以创建并运行Web服务。ASMX是通过隐藏大多数基础XML和Web服务细节来实现这一点的。与强制开发人员直接处理SOAP信封和Web服务描述语言(W

    2022年4月28日
  • XSS漏洞介绍及反射型XSS

    XSS漏洞介绍及反射型XSS什么是XSS攻击:XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制–例如同源策略(sameoriginpolicy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。XSS分类:类型A,本地利用漏洞,这种漏…

    2022年5月6日
  • OSChina 周二乱弹 ——区块链与女朋友之间的关系[通俗易懂]

    OSChina 周二乱弹 ——区块链与女朋友之间的关系[通俗易懂]2019独角兽企业重金招聘Python工程师标准>>>…

    2022年7月27日
  • IDEA的优化配置

    IDEA的优化配置前言IDEA全称IntelliJIDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、创新的GUI设计等方面的功能可以说是超常的。idea的优化可以使我们更得心应手的高效开发设置优化方法分割线一个文件可能会有一个或多个方法,堆积在一起使人眼花缭乱。方法分割线可以是我们快速区分方法。File——Setting——Edi

    2022年5月21日
  • 所有方向你要的资料干货这都有,从入门到实战!【CSDN宝藏资料图鉴第一期】「建议收藏」

    前言CSDN是全球知名的开发者社区,创建于1999年,经过20来年的知识文档积累已然成为中文开发者的知识宝库;从基础的法入门到蜕变实战案例、从神秘前沿技术到清晰的实践步骤,可以说CSDN是你找寻资料的最佳宝库,只要你想得到,在这里就可以找得到!今天我们就来深拔一期有质量的专栏和资源,这些专栏作者可能有些是在校大学生、有些是某领域内的行内大牛,但并不影响他们的文章通俗易懂并且富有深度。从在校大学生我们看到了新一代的奋进,从领域大牛身上我们也看到了无私的技术分享,希望有质量的文章越来越多,共同为行业的进步

    2022年4月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号