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异常。

  • 相关阅读:
    【Java】String和Date、Timestamp之间的转换
    pl/sql改为汉语窗口的办法
    MySql生成随机数
    ETL概念
    oracle数据库中序列使用讲解
    oracle中的merge into用法解析
    mysql实现自动更新时间戳
    3.6:Linux touch命令:修改文件的时间戳
    3.5:Linux rmdir命令:删除空目录
    3.4:Linux mkdir命令:创建目录(文件夹)
  • 原文地址:https://www.cnblogs.com/yezixiao/p/7259483.html
Copyright © 2011-2022 走看看