JVM内存区域

  1. 方法区(线程共享):储被 JVM 加载的类信息、 常量、 静态变量、 即时编译器编译后的代码等数据
    a. 运行时常量池: 运行期间也可能将新的常量放入池中(常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享)
  2. 堆(线程共享):创建的对象和数组都保存在 Java 堆内存中,也是垃圾收集器进行垃圾收集的最重要的内存区域。
  3. 虚拟机栈(线程私有): 方法执行的内存模型,每个方法执行的时候都会创建栈帧,方法结束出栈。
  4. 本地方法区(线程私有):JVM调用外部的一些栈
  5. 程序计数器(线程私有):当前线程的指示器

IO

  1. 阻塞IO
  2. 非阻塞IO:客户线程轮询,返回错误结果后继续发起请求。
  3. 多路复用IO :内核轮询,一个线程管理多个来源的IO
  4. NIO:Java NIO 实际上就是多路复用IO,创建多个socket。内核不断轮询各个socket
  5. 信号驱动IO:发起IO的时候,给socket一个函数,就绪后发送信号给用户线程
  6. 异步IO:应用进程执行 aio_read 系统调用会立即返回,应用进程可以继续执行,不会被阻塞,内核会在所有操作完成之后向应用进程发送信号。

类加载机制

双亲委派模式:

  1. 自底向上检查是否类是否被夹在
  2. 自顶向下尝试加载类