單例模式:
在全局作用域中隻存在同一個内容的設計模式
餓漢式:加載的時候就直接建立了對象。造成資 源浪費,效率降低。線程安全。
懶漢式:使用到對象的時候再建立。效率高,但是線程不安全。
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細節