• 2020-10-10:OOM都有哪些,说出几种?


    福哥答案2020-10-10:#福大大架构师每日一题#

    [答案参考了此链接:](https://cloud.tencent.com/developer/article/1480668)

    本地方法栈:
    1.Out of swap space:该错误表示所有可用的虚拟内存已被耗尽。虚拟内存(Virtual Memory)由物理内存(Physical Memory)和交换空间(Swap Space)两部分组成。当运行时程序请求的虚拟内存溢出时就会报 Outof swap space 错误。
    2.Unable to create new native thread:每个 Java 线程都需要占用一定的内存空间,当 JVM 向底层操作系统请求创建一个新的 native 线程时,如果没有足够的资源分配就会报此类错误。

    虚拟机栈:
    1.java.lang.StackOverflowError :栈内存溢出,可能会被部分面试官怼,说这个不是OOM,得注意。

    堆区:
    1.Java heap space :当 Java 进程花费 98% 以上的时间执行 GC,但只恢复了不到 2% 的内存,且该动作连续重复了 5 次,就会抛出 。
    2.Kill process or sacrifice child:有一种内核作业(Kernel Job)名为 Out of Memory Killer,它会在可用内存极低的情况下“杀死”(kill)某些进程。OOM Killer 会对所有进程进行打分,然后将评分较低的进程“杀死”,具体的评分规则可以参考 Surviving the Linux OOM Killer。
    3.GC overhead limit exceeded (GC回收时间过长,且超过98%的时间都在做垃圾回收且回收的堆内存只占2%造成程序的恶性循环,便会抛出该错误。)

    方法区:
    1.Requested array size exceeds VM limit:JVM 限制了数组的最大长度,该错误表示程序请求创建的数组超过最大长度限制。
    2.Meatespace :JDK 1.8 使用 Metaspace 替换了永久代(Permanent Generation),该错误表示 Metaspace 已被用满,通常是因为加载的 class 数目太多或体积太大。
    3.PermGen space:该错误表示永久代(Permanent Generation)已用满,通常是因为加载的 class 数目太多或体积太大。

    直接内存:
    1.Direct buffer memory:Java 允许应用程序通过 Direct ByteBuffer 直接访问堆外内存,许多高性能程序通过 Direct ByteBuffer 结合内存映射文件(Memory Mapped File)实现高速 IO。

    如有错误,请指正。
    ***
    [评论](https://user.qzone.qq.com/3182319461/blog/1602286148)

  • 相关阅读:
    angular多个控制器如何共享数据
    $q服务的使用
    $sanitize和$sce服务的使用方法
    json对象与json字符串互转方法
    css语法和JS语法的对比
    让低版本IE也能正常运行HTML5+CSS3网站的3种解决方案
    HTML中的IE条件注释
    区块链是什么,如何评价区块链
    编写Python脚本把sqlAlchemy对象转换成dict的教程
    编写Python脚本把sqlAlchemy对象转换成dict的教程
  • 原文地址:https://www.cnblogs.com/waitmoon/p/13795870.html
Copyright © 2020-2023  润新知