天天看點

單例模式,注解,jvm參數

單例模式:

在全局作用域中隻存在同一個内容的設計模式

餓漢式:加載的時候就直接建立了對象。造成資 源浪費,效率降低。線程安全。

懶漢式:使用到對象的時候再建立。效率高,但是線程不安全。

public class SingleTonDemo {
	public static void main(String[] args) {
//		TaskManager tm = new TaskManager();
//		TaskManager tm1 = new TaskManager();
//		System.out.println(tm);
//		System.out.println(tm1);
		TaskManager t = TaskManager.getInstance();
		TaskManager t1 = TaskManager.getInstance();
		System.out.println(t);
		System.out.println(t1);
	}
}

class TaskManager{
	
	// 懶漢式  
	private static TaskManager tm;
	private TaskManager(){	
	}
	public static synchronized TaskManager getInstance(){
//		synchronized (TaskManager.class) {
			// lazy loading
			if (tm == null){
				tm = new TaskManager();
//			}	
		}
		return tm;
	}
}

//class TaskManager{
//	
//	// 餓漢式
//	private static TaskManager tm = new TaskManager();
//	private TaskManager(){	
//	}
//	public static TaskManager getInstance(){
//		return tm;
//	}
//}
           

注解:

給計算機使用. @override @SuppressWarnings 壓制警告

注解的頂級父類: Annotation

定義一個注解:@interface 注解名{ }

注解中隻能包含:基本資料類型、Class、String、 注解、枚舉和包含他們的一維數組

元注解:給注解進行注解

@Target:限定注解的使用範圍

@Retention給注解限定級别 @Inherited 限定子類也要遵循注解

@Documented表示注解會生成到文檔中

// 一維數組如果隻有一個元素,那麼可以省略花括号
@MyAnno(str = "abc",d = 3.14,arr = 1)
public class AnnotationDemo {

}

@interface MyAnno{
	// 預設使用public static修飾
	int i = 10;
	
	String str();
	
	double d();
	// 如果沒有傳入c的值,那麼就是用預設值a
	char c() default 'a';
	
	int[] arr();
}
           
import java.lang.annotation.Documented;
@MyAnno1
public class MyAnnotation {
	public static void main(String[] args) {
		
	}
}

//@Target(ElementType.TYPE)
//@Retention(RetentionPolicy.SOURCE)
//@Inherited
@Documented
@interface MyAnno1{
	
}
           

jvm參數

棧:用于計算。一個線程會有一個棧。

堆:存儲對象。被所有的線程共享。

方法區:舊稱:永久代,在堆裡面。

存儲類資訊。 被所有的線程共享。

本地方法棧:用于計算本地方法。一個線程會有一 個本地方法棧。

寄存器(PC計數器):用于程式計數和指令調配。一 個線程會有一個PC計數器。

-Xss 指定棧的大小

-Xms:指定堆記憶體的最小值

-Xmx:指定堆記憶體的最大值

-Xmn:指定新生代的大小

-XX:+PrintGC 列印GC過程

-XX:+PrintGCDetails 列印GC細節

繼續閱讀