位置:首页 > 后端 > java

JVM性能调优基础知识

chenlong 发布:2021-10-30 17:34:24阅读:

1. 冯诺伊曼体系程序运行

cpmputer_work2.png


2. 程序的栈和堆

duizhan.png


3.JVM内存区域划分(程序计数器、java堆、java虚拟机栈、本地方法栈、方法区)

    • 程序计数器

    1. 一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。

    2. 如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空。

    3. 此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

    • java堆(线程共有)

    1. 全局共享

    2. 通常是java虚拟机中最大的一块内存区域

    3. 主要作为java对象的主要存储区域

    4. JVMS明确要求该区域需要实现自动内存管理,即常说的GC,但并不限制采用那种算法和技术去实现。

    5. 可能出现OutOfMemoryError异常

    • java虚拟机栈(线程私有)

    1. 线程私有

    2. 后进先出(LIFO)栈

    3. 用于执行JAVA方法。栈帧存储局部变量表、操作数栈、动态链接、方法返回地址和一些额外的附加信息。程序执行时栈帧入栈;执行完成后栈帧出栈,支撑java方法的调用、执行和退出

    4. 肯能会出现OutOfMemoryError异常和StackOverFlowError异常

    • 本地方法栈(线程私有)

    1. 线程私有

    2. 后进先出(LIFO)栈

    3. 作用是支撑Native方法的调用、执行和退出

    4. 可能出现OutOfMemoryError异常和StackOverflowError异常

    5. 有一些虚拟机(如HotSpot)将Java虚拟机栈和本地方法栈合并实现

    • 方法区(线程共有)

    (1)方法区

    1. 全局共享

    2. 作用是存储java类的结构信息。用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。但是已经被最新的 JVM 取消了。现在,被加载的类作为元数据加载到底层操作系统的本地内存区。

    3. JVMS不要求该区域实现自动内存管理,但是商用Java虚拟机都能够自动管理该区域的内存

    4. 可能出现OutOfMemoryError异常

    (2)运行时常量区

    1. 全局共享

    2. 是方法区的一部分

    3. 作用是存储java类文件常量池中的符号信息

    4. 可能出现OutOfMemoryError异常


    24人点赞 返回栏目 提问 分享一波

    小礼物走一波,支持作者

    还没有人赞赏,支持一波吧

    留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

    暂无留言,快来抢沙发吧!

    本刊热文
    网友在读
    手机扫码查看 手机扫码查看