• JVM哪些区域可能出现内存溢出,哪些地方需要GC?


    GC顾名思义也就是垃圾回收有人的地方就有江湖,那有数据的地方也理应有垃圾回收,所以思考一下,沿着之前提到过的JVM内存分区,堆,栈,程序计数器,方法区                堆、栈、方法区都会发生内存溢出

    直接说答案,挨个分析

    1.堆(Heap) :

    * 可能出现内存溢出:堆是存储对象实例的区域,当创建的对象数量超过堆的容量时,就会导致堆内存溢出。

    - GC:主要的垃圾回收工作发生在堆中,回收无用的对象,释放内存空间。

    2.栈(Stack)

    - 可能出现内存溢出:栈用于存储**线程的方法调用**和**局部变量**,当栈空间不足时可能导致栈溢出。比如写个无限递归的代码出来

    - GC: 当一个方法执行结束时,其对应的栈帧会被自动弹出,释放栈空间。所以不需要GC管理

    3.程序计数器(Program Counter) :

    - 可能出现内存溢出:程序计数器是线程私有的,不太可能发生内存溢出。

    - GC:程序计数器不涉及垃圾回收。它主要用于记录当前线程执行的字节码指令地址。

    4.方法区(Metaspace,曾经是永久代)∶

    - 可能出现内存溢出:方法区主要用于存储类的元信息、静态变量、常量、枚举,当加载的类过多或者动态生成类过多时,可能导致方法区溢出。

    - 需要GC:方法区在Java 8之后使用Metaspace取代了永久代,它具有更灵活的内存管理机制,不再有永久代的限制。垃圾回收主要针对无用的类信息、常量等。

    堆和方法区是较容易发生内存溢出的区域,需要进行垃圾回收。栈和程序计数器内存溢出一般也在理论中可能实际上很难,不需要我们操心,我们说的GC一般都是指堆空间针对java对象的垃圾回收。

  • 相关阅读:
    RPA案例|云扩助力保险行业开启超自动化运营新阶段
    Nginx服务优化
    基于深度学习的Wiki中文语料词word2vec向量模型
    Vue(js)时间转换
    2.2python 常用的数据结构之列表(list)_python量化实用版教程(初级)
    Windows 启动过程
    JMeter基础脚本编写介绍及案例演示
    express演示前端解决跨域的方法jsonp、cors
    springboot导入excel(POI)
    一些优雅的算法(c++)
  • 原文地址:https://blog.csdn.net/qq_51967234/article/details/139362071