目的是快速定位JVM内存泄漏或者溢出等问题。基础面试题,加分。程序计数器(ProgramCounterRegister)记录了当前线程执行字节码的行号。依靠它来实现分支、循环、跳转、异常处理、线程恢复。Natvie方法,其值为空。Java虚拟机规范中唯一没有指定内存溢出的区域。“线程专用”内存区域。虚拟机栈(VirtualMachineStacks)的生命周期与线程相同。存储局部变量表、操作数栈、动态链接、方法出口等信息。执行该方法时,将创建一个堆栈帧并将其压入堆栈。当方法执行完成时,相应的栈帧从栈中弹出。当堆栈深度太大时,会抛出StackOverflowError。当线程数过多时,会抛出OutOfMemoryError。“线程专用”内存区域。NativeMethodStacks服务于虚拟机使用的Native方法。当堆栈深度太大时,会抛出StackOverflowError。当线程数过多时,会抛出OutOfMemoryError。“线程专用”内存区域。堆(JavaHeap)用于存放对象实例,是JVM占用内存最大的区域。垃圾收集器管理的主要区域。使用分代收集算法时,堆被细分为新生代和老年代,新生代又细分为Eden空间、FromSurvivor空间、ToSurvivor空间。在HotSpot虚拟机中,堆的大小由-Xmx和-Xms控制,新生代的大小由-Xmn控制。堆可以在物理上不连续的内存空间中,只要它在逻辑上是连续的。当没有为实例分配内存时抛出OutOfMemoryError。在“线程共享”内存区中,线程共享堆中可能会划分出多个线程私有分配缓冲区(ThreadLocalAllocationBuffer,TLAB)。方法区存放类信息、常量、静态变量、JVM编译过的已经被JVM加载的代码。回收目标主要是常量池的回收和类型的卸载。您可以选择不实施垃圾回收。当方法区不能满足内存分配要求时,会抛出OutOfMemoryError。JDK6使用永久代来实现方法区。JDK7中永久代的字符串常量池被移出。JDK8使用元空间来实现方法区。“由线程共享”的内存区域。SummaryProgramCounter:当前线程正在执行的字节码的行号指示符。虚拟机栈:Java方法执行的内存模型,用来存放局部变量表、操作数栈、动态链接、方法出口等信息。本地方法栈:本地方法执行的内存模型与虚拟机栈非常相似。不同的是,native方法栈服务于JVM使用的Native方法。堆:用于存放对象实例,是垃圾收集器管理的主要区域。方法区:用于存放JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。最后感谢您的一键三连击,帅气又漂亮。
