• Java堆(Java Heap)


    对于Java应用程序来说,Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。

    Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。

    此内存区域的唯一目的就是存放对象实例,Java世界里“几乎”所有的对象实例都在这里分配内存。在《Java虚拟机规范》中对Java堆的描述是:
    “所有的对象实例以及数组都应当在堆上分配”,
    而这里的“几乎”是指从实现角度来看,随着Java语
    言的发展,现在已经能看到些许迹象表明日后可能出现值类型的支持,即使只考虑现在,由于即时编
    译技术的进步,尤其是逃逸分析技术的日渐强大,栈上分配、标量替换[2]优化手段已经导致一些微妙
    的变化悄然发生,所以说Java对象实例都分配在堆上也渐渐变得不是那么绝对了。

    Java堆是垃圾收集器管理的内存区域,因此一些资料中它也被称作“GC堆”(Garbage Collected
    Heap,幸好国内没翻译成“垃圾堆”)。

    如果从分配内存的角度看,所有线程共享的Java堆中可以划分出多个线程私有的分配缓冲区
    (Thread Local Allocation Buffer,TLAB),以提升对象分配时的效率。不过无论从什么角度,无论如
    何划分,都不会改变Java堆中存储内容的共性,无论是哪个区域,存储的都只能是对象的实例,将Java
    堆细分的目的只是为了更好地回收内存,或者更快地分配内存。

    根据《Java虚拟机规范》的规定,Java堆可以处于物理上不连续的内存空间中,但在逻辑上它应该
    被视为连续的,这点就像我们用磁盘空间去存储文件一样,并不要求每个文件都连续存放。但对于大
    对象(典型的如数组对象),多数虚拟机实现出于实现简单、存储高效的考虑,很可能会要求连续的
    内存空间。

    Java堆既可以被实现成固定大小的,也可以是可扩展的,不过当前主流的Java虚拟机都是按照可扩
    展来实现的(通过参数-Xmx和-Xms设定)。如果在Java堆中没有内存完成实例分配,并且堆也无法再
    扩展时,Java虚拟机将会抛出OutOfMemoryError异常。

  • 相关阅读:
    CTFHub | 过滤空格
    使用Airflow实现简单的工作流调度-大数据培训
    框架的概念
    python一行命令搭建web服务,实现内网共享文件
    TensorFlow
    【JAVA基础】ArrayList综合案例
    单细胞文献学习(part5)--Using Cell-to-Cell Variability— A New Era in Molecular Biology
    Leetcode刷题详解——找到字符串中所有字母异位词
    腾讯云安全2022年度产品发布会:“3+1”一体化防护体系 助力企业实现云上安全“最优解”
    shell脚本中的小坑(空格)--两个小栗子
  • 原文地址:https://blog.csdn.net/weixin_41812346/article/details/133129263