JVM优化_HYJ940228的博客-程序员宅基地_jvm性能优化

技术标签: JVM  JVM优化  

为什么要进行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的使用以及内存溢出分析

  • 查看内存使用情况
    在这里插入图片描述
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HYJ940228/article/details/102800761

智能推荐

eclipse配置servlet路径出错问题_returnadsss的博客-程序员宅基地_servlet配置出错

如图,配置完全正常,但是每次运行时都会在前面多一个servlet,一直在找原因,也比对了网上的教程,路径完全正确,照着书上的重新来了一遍,也是正常的,最后新建一个项目,再运行一遍就正常了,估计是之前的xml写的不规范,导致系统中有些记录遗留,所以路径不正确,新建项目,把代码复制过去即可。...

【Linux运维】第一章:服务器硬件及linux初体验_就叫一片白纸的博客-程序员宅基地

第一章:服务器硬件及linux初体验一、了解linux;1.linux的三大分支:debian、redhat、ubuntu2.redhat版本:redhat:红帽,简称RHEL,企业级官方版本,收费版本;centos:企业社区操作系统版本,不属于红帽公司,却基于红帽的源,代码组件进行重构的社区版;3.安装linux系统注意点:a.将ISO镜像文件放到光驱,点击连接;b.使用默认的磁...

c语言编译为机器码,单片机C语言到机器码的全过程_weixin_39811101的博客-程序员宅基地

我们平时做单片机编程,最常使用的是C语言和汇编语言两种,但是最终下载到单片机内部的,却是HEX文件里的二进制机器代码,很多同学不懂这个过程是如何转换的。我们的程序开发环境,比如KEIL和伟福等等,都是可以使用C或者汇编语言来编程的。对于C语言来讲,一旦我们编程完毕,就可以点击编译,编译的过程,实际上首先通过“编译器”将C语言翻译成汇编语言,再通过“汇编器”将汇编语言转化成机器代码,最终可以下载到单...

战歌网php,教你怎么采集傲气战歌网歌曲(包括分类)_weixin_39706127的博客-程序员宅基地

$list = "\n\n";//首先获取本采集程序地址$fname = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER["SCRIPT_NAME"];//建立傲气战歌13个分类数组,分类基本是死的就不实现采集列出了(接口也难找)$name = array ("每月新曲","MC佳瑶","指挥战歌","DJ音乐","推荐嗨曲","国外战歌","激情战歌...

mysql输入中文出现ERROR 1366_H_MZ的博客-程序员宅基地

mysql输入中文出现如下错误:ERROR 1366: 1366: Incorrect string value: '\xE6\xB0\xB4\xE7\x94\xB5...' for column 'introduce' at row 1这是因为mysql编码的问题 打开mysqlmysql -u root -p...

centos 6 python django mysql_CentOS + Python3.6+ Django2.0 + uwsgi + nginx + mysql web发布环境搭建..._动机在杭州的博客-程序员宅基地

目录:CentOS上升级Python安装easy_install和pipuwsgi安装及测试Django安装及测试连接uwsgi与Djangonginx安装及测试连接uwsgi与nginx连接uwsgi与Django与nginxuwsgi inimysql安装设置python3 Django mysql连接及测试快速搭建blog测试Pycharm开发如果只是想学习django开发直接用django...

随便推点

Linux下文件系统的管理_weixin_34355881的博客-程序员宅基地

Linux文件系统的管理一、文件系统概述1、概述: 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件...

Leetcode——884.两句话中的不常见单词——题解+代码实现_鬼 | 刀的博客-程序员宅基地

一、题目给定两个句子A和B。(句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。返回所有不常用单词的列表。您可以按任何顺序返回列表。示例 1:输入:A = "this apple is sweet", B = "this apple is sour"输出:[...

三星android智能手机usb驱动程序,三星智能手机USB驱动_weixin_39669638的博客-程序员宅基地

Samsung三星智能手机USB驱动1.5.55.0版For WinXP-32/WinXP-64/Vista-32/Vista-64/Win7-32/Win7-64/Win8-32/Win8-64/Win8.1-32/Win8.1-64(2015年7月13日发布)不少智能手机用户可能遇到过这样的情况:手机用USB数据线与计算机连接了,却无法读取手机上的文件;设备管理器里有个带黄色感叹号的未知设备。...

python 结巴分词(jieba)学习_zhangqixiang5449的博客-程序员宅基地

转:http://www.tuicool.com/articles/QV36ru 源码下载的地址:https://github.com/fxsjy/jieba演示地址:http://jiebademo.ap01.aws.af.cm/特点 1,支持三种分词模式: a,精确模式,试图将句子最精确地切开,适合文本分析; b,全模式,把句子中所有的可以成词的词语都扫描出来, 速度非

python pip有什么用_pip的介绍和使用_weixin_39730911的博客-程序员宅基地

我们都知道python有很多的第三方库或者说是模块。这些库针对不同的应用,发挥不同的作用。我们在实际的项 目中肯定会用到这些模块。那如何将这些模块导入到自己的项目中呢?Python官方的PyPi仓库为我们提供了一个统一的代码托管仓库,所有的第三方库,甚至你自己写的开源模块,都 可以发布到这里,让全世界的人分享下载 。python有两个著名的包管理工具easy_install和pip。在python...

来信, 创业 和 移动互联网_无明客的博客-程序员宅基地

上一篇博文翻译了Steve Yegge的rant,这两天有一些事让我也想rant一下(所谓rant就是一篇巨长无比的抱怨和说教),不过无论是从见解还是恶搞来说肯定没有SteveY的水平高,所以,这篇博文只是单纯的rant,看标题就知道了,就像“篱笆,女人和狗”一样,乡土味实足。所以,下述的一些观点未必正确,也未必靠谱,也就是我的个人唠叨罢了,我想到哪里说到哪里。(篇幅较长,见谅)引子