本文共 1133 字,大约阅读时间需要 3 分钟。
(1)Little Space
(2)当前所执行字节码的行号指示器(3)每条线程都有独立的程序计数器——线程切换后回到正确的位置ps.多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的(1) 线程私有,生命周期与线程相同
(2) 原理图(3) 线程请求栈的深度大于虚拟机所允许的深度,抛出StackOverflowError;虚拟机栈动态扩展时无法申请到足够的内存,抛出OutOfMemoryError。
本地方法栈与虚拟机栈作用相似,区别:虚拟机栈为虚拟机执行Java
方法服务,本地方法栈则为Native方法服务。(1)最大的一块内存;
(2)被所有线程共享,在虚拟机启动时创建;(3)唯一目的:存放对象实例;(4)垃圾收集器管理的主要区域,因此也被称为GC堆。由于GC回收机制采用分代收集算法,所以堆还可以分为新生代和老年代; 从内存分配角度看,堆可划分出多个线程私有的分配缓冲区。(5)不需要连续的内存,可以选择固定大小也可以通过-Xmx和-Xms控制虚拟机扩展,堆无法再扩展时,抛出OutOfMemoryError。用于储存已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
不需要连续的内存,可以选择固定大小也可以通过-Xmx和-Xms控制虚拟机扩展,可以选择不实现垃圾收集。这区域的内存回收目标主要是针对常量池的回收和对象类型的卸载。(1)Runtime Constant Pool是方法区的一部分。
不是虚拟机运行时数据取的一部分,但这部分内存也被频繁使用,也可能导致OutOfMemoryError。
NIO(基于通道与缓冲区的I/O方式)可以使用Native函数库直接分配堆外内存,然后通过堆中DirectByteBuffer对象作为这块内存的引用进行操作。转载地址:http://yownm.baihongyu.com/