JVM内存区域
- 方法区(线程共享):储被 JVM 加载的类信息、 常量、 静态变量、 即时编译器编译后的代码等数据
a. 运行时常量池: 运行期间也可能将新的常量放入池中(常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享) - 堆(线程共享):创建的对象和数组都保存在 Java 堆内存中,也是垃圾收集器进行垃圾收集的最重要的内存区域。
- 虚拟机栈(线程私有): 方法执行的内存模型,每个方法执行的时候都会创建栈帧,方法结束出栈。
- 本地方法区(线程私有):JVM调用外部的一些栈
- 程序计数器(线程私有):当前线程的指示器
IO
- 阻塞IO
- 非阻塞IO:客户线程轮询,返回错误结果后继续发起请求。
- 多路复用IO :内核轮询,一个线程管理多个来源的IO
- NIO:Java NIO 实际上就是多路复用IO,创建多个socket。内核不断轮询各个socket
- 信号驱动IO:发起IO的时候,给socket一个函数,就绪后发送信号给用户线程
- 异步IO:应用进程执行 aio_read 系统调用会立即返回,应用进程可以继续执行,不会被阻塞,内核会在所有操作完成之后向应用进程发送信号。
类加载机制
双亲委派模式:
- 自底向上检查是否类是否被夹在
- 自顶向下尝试加载类