单例模式:
在全局作用域中只存在同一个内容的设计模式
饿汉式:加载的时候就直接创建了对象。造成资 源浪费,效率降低。线程安全。
懒汉式:使用到对象的时候再创建。效率高,但是线程不安全。
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细节