【java调优1】jprofiler简单使用
2023-12-21 12:56:17
一 编写测试类
主类死循环,持续接受控制台输入;输入a可创建3000个实体类;输入b暂停5秒线程;输入c调用d方法暂停5秒线程。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class E {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while(true) {
String a = s.nextLine();
System.out.println("===========");
System.out.println(a);
E e = new E();
if("a".equals(a)) {
e.a();
}
if("b".equals(a)) {
e.b();
}
if("c".equals(a)) {
e.c();
}
}
}
public void a() {
System.out.println("a");
List<TestE> l = new ArrayList<TestE>();
for(int i=0;i<3000;i++) {
TestE e = new TestE("a"+i, i, "aa==="+i);
l.add(e);
}
l.add(new TestE());
}
public void b() {
try {
System.out.println("b");
new Thread().sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void c() {
System.out.println("c");
c2();
}
public static void c2() {
try {
System.out.println("c2");
new Thread().sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class TestE{
private String name;
private Integer num;
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public TestE(String name, Integer num, String desc) {
super();
this.name = name;
this.num = num;
this.desc = desc;
}
public TestE() {
// TODO Auto-generated constructor stub
}
}
二 原审,启动
三 jp,启动
现在的jdk自带,在bin/jvisualvm.exe
屏幕左侧双击666进入运行的java程序(当前正在运行的才能狂暴鸿儒,run一下跑完的程序只会在这里闪一下,运行完就看不到了)
profiler标签,可查看cpu、内存情况。点击开始监控,且会消耗资源,不适合生产环境使用。
方法运行用时,但不能查看实例
四 其它流程
1 (win操作系统)cmd切换至bin目录,执行 jstat -gc pid (pid可看上述左侧)
可查看gc各代容量、已使用量,看是否有内存占用高、泄露溢出的情况。
- S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
- S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
- S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
- S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
- EC :年轻代中Eden(伊甸园)的容量 (字节)
- EU :年轻代中Eden(伊甸园)目前已使用空间 (字节)
- OC :Old代的容量 (字节)
- OU :Old代目前已使用空间 (字节)
- MC:metaspace(元空间)的容量 (字节)
- MU:metaspace(元空间)目前已使用空间 (字节)
- YGC :从应用程序启动到采样时年轻代中gc次数
- YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
- FGC :从应用程序启动到采样时old代(全gc)gc次数
- FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
- GCT:从应用程序启动到采样时gc用的总时间(s)
2 查pid
cmd 指令 tasklist
cmd 指令 netstat -ano
任务管理器查看进程pid
3 执行指令 jmap -dump:live,format=b,file=xxx/xxx.jprofile pid
导出堆文件至指定位置
在jvisualvm中可载入,查看导出的快照
查看概要信息
快照中的类
文章来源:https://blog.csdn.net/misakakagami/article/details/135107075
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!