
分析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.ArrayListimport 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)
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)