linux系统怎么对JAVA应用程序进行性能分析?

linux系统怎么对JAVA应用程序进行性能分析?,第1张

分析CPU占用的方法和手段:

1. top命令可以查看实时的CPU使用情况。

2. ps -ef命令:可以查看进程以及进程中线程的当前CPU使用情况以及属于当前状态的采样数据。

3. jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。

4. pstack:Linux命令。可以查看某个进程的当前线程栈运行情况

分析内存性能的方法和技巧:

1.top命令:可以查看实时的内存使用情况。

2.jmap -histo:live [pid],然后分析具体的对象数目和占用内存大小,从而定位代码。

jmap -dump:live,format=b,file=xxx.xxx [pid],然后利用MAT工具分析是否存在内存泄漏等等。

构造函数是没有返回值并且与类同名的,如你上面的Point(int a,int b)

前面可以加public 或,private,(我说的没有返回值"不"是在前面加void)

普通的方法可以有返回值的,即使没有返回值也要声明成void的,如public String getName(){//..}

public void setName(String name){//..}

我们通过构造函数来创建对象并对成员变量进行初始化,如:Point p=new Point()其中Point()就是构造函数,如果没有显示的为成员变量赋值,那么他会被赋成默认值的,如int型的为0

我们创建了对象,就可以调用对象的方法了.如p.output(5,5)

Point pt是先声明一个对象的引用,他并没有被实例化和初始化(就是没有在内存中分配空间---初始化,没有给成员变量付初始值---实例化.)

其实:

Point pt

pt=new Point(3,3)

可以写成:Point pt=new Point(3,3)

pt.output()的意思是:调用上面创建的对象(pt)的一个方法output(),此方法会打印出变量x和y的值.

import java.util.ArrayList

import java.util.List

//该类有三个方法,一个给list填充,一个处理并打印,一个在main执行

public class Test {

public static void main(String[] args) {

Test t = new Test()

t.contList()

t.getAllArray(list, 0)

}

private static List list = new ArrayList()

private void contList() {

list.add(new Integer(1))

list.add(new Integer(2))

list.add(new Integer(3))

}

//前面两个没啥好说的,这个是关键,该方法参数两个:一个List类型的inlist和一个整型的site

//这里单纯说这个方法太抽象,我们结合上面两个方法

//假设已经初始化了,inlist其实就是list(1,2,3)

public void getAllArray(List inlist, int site) {

//给出一个临时site,开始这两个site都是0

int tempsite = site

//site会在下面的循环自增,到最后会等于inlist的大小等3,这时退出方法

if (site >= inlist.size()) {

return

}

//名字起得很明白,第一个数字,也就是每一个数列的第一位,姑且称为首数

//再看怎么给它赋值的,原来直接在inlist中取值,第一个是1,因为inlist(1,2,3),get(0)=1

Integer firstNode = (Integer) inlist.get(site++)

//再给出一个临时的list,这个list跟inlist是一样的列表(1,2,3),另外此时的site已为1了

List tempList = new ArrayList(inlist)

//临时列表发生了变化,移除了一个元素,

//很关键的是这个元素是由临时site决定的,此时tempsite依然为0

//因为引出的是具体元素的索引,临时list(1,2,3)中index=0时具体元素为1,

tempList.remove(tempsite)

//首数为1,临时list(2,3),开始了它们的两个循环

// 此时临时list大小为2,所以第一个循环的次数必定为2,因为只有i=0和i=1

for (int i = 0i <tempList.size()i++) {

//先打印1

System.out.print(firstNode)

//开始第二个循环,j的初始值由i决定,循环次数是2+i

//此时j=0,j<2

for (int j = ij <tempList.size() + ij++) {

//因为j=0 <2,所以执行条件1,打印出一个逗号和一个2,(2,3)中get(0)=2

//打印了2后又回到for里面,此时j已为1,还是条件1,get(1)=3,打印结果1,2,3

//最后一次j已不再小于2,跑到下面去打印“”去了,这个用来换行

if (j <tempList.size()) {

System.out.print("," + tempList.get(j))

} else {

System.out.print("," + tempList.get(j - tempList.size()))

}

}

//换行后继续回到第一个循环,i=1,第二个循环,j=1,get(1)=3,

// 然后继续第二个循环j=2,j<2+1,但是此时不满足条件1,跑到2,

// 打印逗号,get(2-2)即get(0)=2,也就是(1,3,2)

System.out.println("")

}

//返回调用结果的结果,结果有两个数列(1,2,3)和(1,3,2)

//其他的就不啰嗦了

getAllArray(inlist, site)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11135432.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存