如你梦想和现实只是一步之遥,那么我觉得这一步就应该是执着和笨蛋式的坚持了吧。

java 启动一个main类带上jvm参数

java 独孤九剑 118℃

大概的场景是这样的,我们平时写了一个简单的java类,直接启动,我们是没办法知道jvm相关的参数值是多少的。
jvm_no_params
然后再看看visual GC界面
jvm_visual_gc
这个可以看到
-Xmx=2227(大概的,我的电脑内存是8G,也就差不多1/4的物理内存吧)

实际上我们并不想要这么大的。比如我想学习下jvm相关的东西,我要设置小一点。
只需要java -Xmx10m -Xms5m ab.HelloAction 采用这种方式启动
-Xmx10m (堆内存最大值为10m)
-Xms5m(堆内存最小值为5m)
jvm_2
然后再看看visual GC插件界面
jvm_3

我的源代码如下:(最终会看到一个异常java.lang.OutOfMemoryError)

package com.gc.test;


import java.util.ArrayList;
import java.util.List;

public class HelloAction {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		List<Hello1> list = new ArrayList<Hello1>();
//		boolean flag = true;
		int i=0;
//		System.out.println(i);
//		
////		for(;i<10;i++){
////			HelloAction1 he = new HelloAction1();
////			System.out.println(he);
////		}
		while(i<1000000000){
			try {
				Thread.sleep(1);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			i++;
			Hello1 he = new Hello1("iname" + i, "" + i, i);
			list.add(he);
		}
		
	}

	@Override
	protected void finalize() throws Throwable {
		// TODO Auto-generated method stub
		super.finalize();
		System.out.println("对象被回收:" + this.hashCode());
	}

	
	
}
class Hello1 {
	private String name;
	private String age;
	private int index;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public int getIndex() {
		return index;
	}
	public void setIndex(int index) {
		this.index = index;
	}
	
	public Hello1(){}
	public Hello1(String name, String age, int index) {
		super();
		this.name = name;
		this.age = age;
		this.index = index;
	}
	@Override
	public String toString() {
		return "Hello1 [name=" + name + ", age=" + age + ", index=" + index + "]";
	}
	
	
}

异常信息:
C:\Users\win10\Desktop>java -Xmx10m -Xms5m ab.HelloAction
Exception in thread “main” Exception in thread “RMI TCP Connection(idle)” java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.lang.AbstractStringBuilder.(Unknown Source)
at java.lang.StringBuilder.(Unknown Source)
at ab.HelloAction.main(HelloAction.java:29)
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.io.ObjectInputStream$BlockDataInputStream.(Unknown Source)

然后再看看visual GC已经爆掉了。
jvm_visual_4

如果是eclipse里面其实也可以添加jvm参数进行启动。
jvm_eclipse_1
然后
jvm_eclipse_2

如果那里说的不对的地方,可以给我留言。感谢您的阅读。

PS: 服务器页面生成花费时间 0.18秒 查询 42 次

转载请注明:KEEP3YUE » java 启动一个main类带上jvm参数

喜欢 (0)