zoukankan      html  css  js  c++  java
  • Java 堆

      对于大多数应用程勋来书,Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中描述是:所有的对象实例及数组都要在堆上分配,但是随着JIT编译器的发展和逃逸分析技术的逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配在堆上也渐渐的变得不难么绝对了。

      Java堆是垃圾收集器管理的主要内存区域,因此很多时候也被称作“GC堆”。如果从内存回收的角度看,由于现在的收集器基本都采用的是分代收集算法,所以Java堆中还可以细分为:新生代和老年代;在细致一点的Eden空间,from survivor空间,to survivor空间。如果从内存分配的角度看,线程共享的Java堆中可能会出多个线程私有的分配缓冲区(Thread local allocation buffer)。不过无论如何划分,都与存放内容无关,无论哪个区域,存储的都仍然是对象实例。进一步分化的目的是为了更好地回收垃圾,或者更快地分配内存。

      根据Java虚拟机规范规定,Java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可,就像我们的磁盘空间一样,在实现时既可以实现成固定大小的,也可以是可扩展的,不过当前主流的虚拟机都是按照可扩展来实现的(通过—Xmx和-Xms控制的)。如果在堆中没有内存完成实例分配,并且对也无法再扩展时,将会抛出OutofmemoryError异常。

  • 相关阅读:
    Django中的syncdb命令
    notepad++下的字体设置
    python中的getattr函数
    python实现虚拟茶话会
    利用python爬取海量疾病名称百度搜索词条目数的爬虫实现
    SQL里面如何取得前N条数据?
    python中怎么查看当前工作目录和更改工作目录
    python中thread模块中join函数
    python中的自测语句是什么?
    python读取数据库数据有乱码怎么解决?
  • 原文地址:https://www.cnblogs.com/yezixiao/p/7259483.html
Copyright © 2011-2022 走看看