Skip to content

Latest commit

 

History

History
101 lines (48 loc) · 3.15 KB

File metadata and controls

101 lines (48 loc) · 3.15 KB

二、面向对象基础

1. 内存分析

1.1 Java虚拟机的内存

​ Java虚拟机的内存可以分为三个区域:栈Stack、堆Heap、方法区method area(也是在堆中)

1.1.1 栈的特点:
  • 栈是方法执行的内存模型,每个方法被调用后都会创建一个栈帧,栈帧会保存该方法的局部变量、操作数、方法出口等;
  • JVM会为每个线程都开辟一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等),因此,栈时线程私有的,不能线程之间不能共享栈内的数据;
  • 栈由系统自动分配,速度快,属于连续的内存空间;
1.1.2 堆的特点:

​ 堆是一个不连续的内存空间,分配灵活,速度慢。JVM中只有一个堆,用所有线程之间都共享这个空间。堆用于存储创建好的对象和数组(数组也是对象)。

1.1.3 方法区的特点:
  • JVM中只有一个方法区,被所有的线程共享;
  • 方法区位于堆中,用于存储类和常量相关的系想你(例如:类信息Class对象静态变量字符串常量等);
1.1.4 模型分析

Java内存模型

2. 垃圾回收机制

​ Java中的垃圾回收机制中需要做到两点:

  1. 发现内存中无用的对象
  2. 清除无用的对象;

其中,发现的方法主要由两种:① 引用计数法; ② 引用可达法(根搜索法)。

3. 通用分代垃圾回收机制

​ 了解分代垃圾回收机制

#. 易遗忘知识点

  • 静态代码块是用来初始化类对象的;静态代码块的执行顺序根据它所处的位置来决定(按照声明的顺序来执行)。
  • instanceof是一个二元运算符,可以用来测试一个对象是否为一个类的实例,当是该类的实例时,会返回true。(注意:当实例 instanceof 实例对应的类的父类时,返回的也是true.)
  • ==equals()方法:
    • ==代表比较双方是否相同,如果是基本类型则表示判断值是否相等,如果是引用类型,则表示地址是否相等。

三、多线程

3.1 创建线程的方式

3.1.2 利用Callable接口创建多线程

步骤

  1. 创建目标对象; ``
  2. 创建执行任务; ExecutorService ser = Executors.newFixedThreadPool(1);
  3. 提交执行; Future<Boolean> result1 = ser.submit(目标对象);
  4. 获取结果; boolean r1 = result1.get();
  5. 关闭服务; ser.shutdownNow();

#. 易遗忘的知识点

  1. Java中多线程用了静态代理模式,具体模式就是:
    • 定义两个角色:目标角色You和代理角色WeddingCompany
    • 上面的两个角色实现相同的接口Marry
    • 每个角色都继承Marry接口,并实现对应的方法:
      • 针对You:根据具体的业务来写;
      • 针对WeddingCompany:保存一个目标对象,并调用目标对象的实现方法;同时,在调用方法之前可以执行一些操作(例如记录日志),在调用方法之后也可以执行一些操作(例如记录日志)。