JVM性能调优基础知识
chenlong 发布:2021-10-30 17:34:24阅读:1. 冯诺伊曼体系程序运行
2. 程序的栈和堆
3.JVM内存区域划分(程序计数器、java堆、java虚拟机栈、本地方法栈、方法区)
程序计数器
一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。
如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空。
此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。
java堆(线程共有)
全局共享
通常是java虚拟机中最大的一块内存区域
主要作为java对象的主要存储区域
JVMS明确要求该区域需要实现自动内存管理,即常说的GC,但并不限制采用那种算法和技术去实现。
可能出现OutOfMemoryError异常
java虚拟机栈(线程私有)
线程私有
后进先出(LIFO)栈
用于执行JAVA方法。栈帧存储局部变量表、操作数栈、动态链接、方法返回地址和一些额外的附加信息。程序执行时栈帧入栈;执行完成后栈帧出栈,支撑java方法的调用、执行和退出
肯能会出现OutOfMemoryError异常和StackOverFlowError异常
本地方法栈(线程私有)
线程私有
后进先出(LIFO)栈
作用是支撑Native方法的调用、执行和退出
可能出现OutOfMemoryError异常和StackOverflowError异常
有一些虚拟机(如HotSpot)将Java虚拟机栈和本地方法栈合并实现
方法区(线程共有)
(1)方法区
全局共享
作用是存储java类的结构信息。用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。但是已经被最新的 JVM 取消了。现在,被加载的类作为元数据加载到底层操作系统的本地内存区。
JVMS不要求该区域实现自动内存管理,但是商用Java虚拟机都能够自动管理该区域的内存
可能出现OutOfMemoryError异常
(2)运行时常量区
全局共享
是方法区的一部分
作用是存储java类文件常量池中的符号信息
可能出现OutOfMemoryError异常
小礼物走一波,支持作者
赏还没有人赞赏,支持一波吧