欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jvm性能调优相关

程序员文章站 2024-03-23 22:10:22
...

模拟创建大量对象的情况,代码如下:

public class Person {
    String id ;
    String name ;
    
	public Person(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
    
}


public class NewTask implements Runnable{

    @Override
    public void run() {
        while(true)
        {   ThreadLocal<Person>  tl  = new ThreadLocal();
        	String str  = new String(""+Thread.currentThread().getName());
        	Person p = new  Person(Thread.currentThread().getName(),Thread.currentThread().getName());
        	tl.set(p);
        	System.out.println(p.name);
        }
    }

}




public class  DemoApplication {

public static void main(String[] args) throws Exception {        
    for (int i = 0; i < 50; i++) {
    	Thread t = new Thread(new NewTask(),"th"+(i+1));
        t.start();
	}
}
}

创建50个线程,每个线程都执行创建Person对象,然后放入到线程自己的内存中。为了效果明显,(使用的eclipse)修改内存大小如下:

jvm性能调优相关

先看一下  jvisualvm 工具的结果:

jvm性能调优相关

jvm性能调优相关

至于为何每次到了最大值大概时110mb时,会突然变小。是因为发生了full gc。

jvm性能调优相关

我们可以大概计算一下full gc的频率:大概就是92秒一次full gc。

然后我们查看一下对象信息:

jvm性能调优相关

创建了大量的ThreadLocal对象和Person对象。

下面是使用jstack命令(jstack -l 3756 )的结果:

jvm性能调优相关

 

 

 

 

 

 

上一篇: java中字符输入输出流

下一篇: