iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java JVM虚拟机调优详解
  • 327
分享到

Java JVM虚拟机调优详解

2024-04-02 19:04:59 327人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录jmap查看内存信息jstackjinfo查看JVM系统参数Jstat查看堆内存使用和类加载的数量信息内存泄漏jmap查看内存信息 jmap histo /pid > ./

jmap查看内存信息

jmap histo /pid > ./log.txt :查看某一进程实例个数,占用内存的字节数,以及所属的类

jmap -heap /pid :查看堆信息

jmap ‐dump:fORMat=b,file=app.hprof /pid

通过jvisualvm命令启动jvm可视化管理界面可导入dump文件进行分析:查看类的实例

jstack

分析死:写一段死锁代码

public class DeadLockTest {
    private final static Object lock1 = new Object();
    private final static Object lock2 = new Object();
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock1) {
                    try {
                        System.out.println(Thread.currentThread().getName() + ": get the lock1");
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (lock2) {
                        System.out.println(Thread.currentThread().getName() + ": get the lock2");
                    }
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock2) {
                    try {
                        System.out.println(Thread.currentThread().getName() + ": get the lock2");
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (lock1) {
                        System.out.println(Thread.currentThread().getName() + ": get the lock1");
                    }
                }
            }
        }).start();
    }
}

"Thread-1" 线程名;prio=5 优先级=5; tid=0x0000000019aa9000线程id; nid=0x6c4线程对应的本地线程标识nid; java.lang.Thread.State: BLOCKED 线程状态

启动 jvisualvm命令选择对应的进程即可查看到死锁的线程

Jstack分析CPU使用率高的线程堆栈信息

启动一个while循环,使CPU一直工作

1、top -p /pid:查看进程占用资源情况

显而易见该进程导致CPU使用率几乎100%。

2、按H查看进程内每个线程占用资源的情况

3、找到CPU使用近100%的PID这列,表示线程tid为5027,通过转换器转为16进制为13a3,

4、通过jstack命令执行jstack 5026|grep -A 10 13a3,即可得到线程tid为13a3的堆栈信息,进而找到导致CPU占用100%的执行行号

jinfo查看jvm系统参数

jinfo -flags /pid :查看jvm参数

jinfo -sysprops /pid:查看java的系统参数

Jstat查看堆内存使用和类加载的数量信息

jstat -GC /pid:垃圾回收统计

S0C:第一个幸存区的大小,单位KB; S1C:第二个幸存区的大小; S0U:第一个幸存区的使用大小;S1U:第二个幸存区的使用大小; EC:伊甸园区的大小; EU:伊甸园区的使用大小; OC:老年代大小; OU:老年代使用大小; MC:方法区大小(元空间) ;MU:方法区使用大小; CCSC:压缩类空间大小; CCSU:压缩类空间使用大小; YGC:年轻代垃圾回收次数; YGCT:年轻代垃圾回收消耗时间,单位s; FGC:老年代垃圾回收次数; FGCT:老年代垃圾回收消耗时间,单位s; GCT:垃圾回收消耗总时间,单位s

jstat -gccapacity/pid: 堆内存统计

NGCMN:新生代最小容量;NGCMX:新生代最大容量;NGC:当前新生代容量;S0C:第一个幸存区大小;S1C:第二个幸存区的大小;EC:伊甸园区的大小;OGCMN:老年代最小容量;OGCMX:老年代最大容量;OGC:当前老年代大小;OC:当前老年代大小;MCMN:最小元数据容量;MCMX:最大元数据容量;MC:当前元数据空间大小;CCSMN:最小压缩类空间大小;CCSMX:最大压缩类空间大小;CCSC:当前压缩类空间大小;YGC:年轻代gc次数;FGC:老年代GC次数

jstat -gcnew /pid:查看新生代垃圾回收统计

TT:对象在新生代存活的次数; MTT:对象在新生代存活的最大次数; DSS:期望的幸存区大小

jstat -gcnewcapacity/pid:查看新生代内存容量

S0CMX:最大幸存1区大小;S1CMX:最大幸存2区大小;ECMX:最大伊甸园区大小

jstat -gcold /pid:查看老年代垃圾回收统计

jstat -gcoldcapacity/pid:查看老年代内存容量

jstat -gcmetacapacity/pid:查看元数据空间统计

通过jstat gc -pid命令可以优化java应用的启动参数,jstat -gc pid 1000 10 (每隔1秒执行1次命令,共执行10次)预估每秒Eden区会新增多少对象,可根据具体结果调整时间。优化思路其实简单来说就是尽量让每次Young GC后的存活对象小于Survivor区域的50%,都留存在年轻代里。尽量别让对象进入老年代。尽量减少Full GC的频率,避免频繁Full GC对JVM性能的影响。

内存泄漏

对于一些老旧的数据,比如jvm级别的内存没有及时清理,导致数据越堆越多,时间长了就会频繁导致full gc,从而导致内存泄漏。可以使用成熟缓存架构ehcache,他们有实现LRU数据淘汰策略。

到此这篇关于Java JVM虚拟机调优详解的文章就介绍到这了,更多相关Java JVM调优内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java JVM虚拟机调优详解

本文链接: https://www.lsjlt.com/news/164675.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java JVM虚拟机调优详解
    目录jmap查看内存信息jstackjinfo查看jvm系统参数Jstat查看堆内存使用和类加载的数量信息内存泄漏jmap查看内存信息 jmap histo /pid > ./...
    99+
    2022-11-13
  • java虚拟机之JVM调优详解
    目录JVM常用命令行参数1. 查看参数列表2. 基本参数说明:3. 扩展参数说明:虚拟机参数分类什么是调优1.调优步骤:2.调优案例2.1案例一2.2案例二JVM优化总结JVM常用命...
    99+
    2022-11-12
  • JAVA虚拟机(JVM)详细介绍(七)——JVM优化
    还以这个图为例,从.java到.class是编译过程,从.class到机器码是解释过程。下面对其进行分别优化。在优化过程中,对编译阶段的优化主要是对前端编译器的优化,在运行阶段的优化,主要是对即时编译器的优化。编译器优化编译过程以上为jav...
    99+
    2017-09-20
    java教程 JVM
  • JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)
    JVM(Java虚拟机) JVM 内存模型 结构图 jdk1.8 结构图(极简) jdk1.8 结构图(简单) JVM(Java虚拟机): 是一个抽象的计算模型。如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域。...
    99+
    2023-08-30
    jvm GC 直接内存 jvm性能调优
  • Java 虚拟机(JVM)之基本概念详解
    1、类加载子系统:负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间。2、方法区:就是存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等。方法区是辅助堆栈的块永久区,解决堆栈信息的产生,是先决...
    99+
    2023-05-31
    java 虚拟机 基本概念
  • JVM学习- - -虚拟机栈详解
    前言:今天学长带领大家走进JVM学习,让我们一起来学习认识虚拟机栈吧~ 目录 1 虚拟机栈概述 虚拟机栈出现的背景 初步印象 内存中的栈和堆 虚拟机栈基本内容 栈的优点 2 栈的存储单位 栈中存储什么? 栈运行原理 栈帧的内部结构 ...
    99+
    2023-09-12
    jvm 学习 java
  • JAVA虚拟机(JVM)详细介绍(一)——JVM概述
    首先,对以上的四部分进行解释。(1)自动内存管理讲的是java运行时数据区里的部分,分为内存划分和垃圾收集器。(2)执行子系统讲的是画红圈的三部分:类文件结构、类加载机制、字节码执行引擎。(3)优化分别为编译期优化和运行期优化。(4)并发讲...
    99+
    2016-06-30
    java教程 JVM
  • jvm虚拟机类加载机制详解
    目录1 概述2 类的加载时机3 类的加载过程3.1 加载3.2 验证3.3 准备3.4 解析3.5 初始化4 类加载器4.1 双亲委派模型4.2 破坏双亲委派模型1 概述 ​ Jav...
    99+
    2022-11-13
  • java为什么需要虚拟机jvm原理详解
    曾几何时,我们还是初识Hello World的时候,我们哪曾知道,Java这门神奇的语言,在执行我们的代码的时候,不是直接将我们所编写的Java代码交付给操作系统底层进行解析编译,...
    99+
    2022-11-12
  • JAVA虚拟机(JVM)详细讲解(二)——内存的划分
    我们知道,在C++语言里,如果想使用一个对象,需要对其进行new操作;如果不用这个对象了,需要对其进行delete操作。一旦开发人员忘记写delete语句了,就会造成内存泄露。【内存被对象占用着不还,就叫内存泄露。】而java就聪明了,它从...
    99+
    2020-08-19
    java教程 JVM
  • Java虚拟机怎么利用JVM进行优化
    本篇文章为大家展示了Java虚拟机怎么利用JVM进行优化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言Java虚拟机是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最...
    99+
    2023-05-31
    java jvm ava
  • JAVA虚拟机(JVM)详细介绍(五)——类加载机制
    上篇中我们讲解了Class文件,这篇我们说说虚拟机是如何加载这些Class文件的?Class文件中的信息进入到虚拟机后会发生什么变化?这就涉及到了类加载机制。类加载机制是把类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始...
    99+
    2015-12-28
    java教程 JVM
  • JAVA虚拟机(JVM)详细介绍(八)——高效并发
    内存模型内存模型是在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。其主要目标是定义程序中各个变量的访问规则。主内存和工作内存所有的变量都存储在主内存中,每条线程还有自己的工作内存,其工作内存中是被线程使用到的变量的主内存副...
    99+
    2017-08-31
    java教程 JVM
  • JAVA虚拟机(JVM)详细介绍(三)——垃圾收集机制
    在上一篇中我们说过,自动内存管理分为两部分:给对象分配内存和回收分配给对象的内存。这篇我们说说后者,即回收分配给对象的内存。回收内存要用到垃圾收集机制,英文名儿是GC(Garbage Collection)。在本部分我们要解决如下几个问题:...
    99+
    2017-01-27
    java教程 JVM
  • 深入理解Java虚拟机 JVM 内存结构
    目录前言JVM是什么JVM内存结构概览运行时数据区程序计数器Java虚拟机栈本地方法栈方法区运行时常量池Java堆直接内存前言 JVM是Java中比较难理解和掌握的一部分,也是面试中...
    99+
    2022-11-12
  • Java虚拟机JVM类加载机制(从类文件到虚拟机)
    目录一、类加载机制简介二、类加载机制过程 2.1、加载(Load)2.2、连接(Linking)2.3、初始化(Initialize)三、类加载器Classloader&n...
    99+
    2022-11-12
  • Java虚拟机栈jvm栈的作用
    目录1. 定义2. 栈的线程安全问题3. 栈内存溢出1. 定义 栈:线程运行时需要的内存空间,一个栈存在多个栈帧。栈具有先入后出,后入先出的特点。 栈帧:每个方法运行时需要的内存(局...
    99+
    2022-11-12
  • JAVA虚拟机(JVM)详细介绍(四)——类文件结构
    讲完了自动内存管理,我们来说说执行子系统。执行子系统讲解的是JVM如何执行程序。Class文件概述这篇我们只讲讲Class文件。Class文件又名类文件或字节码文件。javac将.java文件(源代码)编译成.class文件(字节码),jv...
    99+
    2016-02-29
    java教程 JVM
  • 详解JVM中的GC调优
    目录那些GC的默认值GC的选择GC的最大线程个数初始化heap size最大的heap size分层编译技术我们到底要什么最大暂停时间吞吐率那些GC的默认值 其实GC或者说JVM的参...
    99+
    2022-11-12
  • java虚拟机指令dup详解
    本文实例为大家介绍了java虚拟机指令dup,供大家参考,具体内容如下举个例子:public class ExceptionTest{ void cantBeZero(int i) throws Exception{ throw n...
    99+
    2023-05-31
    java dup ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作