zoukankan      html  css  js  c++  java
  • 虚拟机堆(Heap)的基础知识

    概述

    • 一个进程对应一个JVM实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈
    • 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域
    • Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间(堆内存的大小是可以调节的)
    • 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的
    • 所有的线程共享java堆,在这里还可以划分线程私有的缓冲区(TLAB:Thread Local Allocation Buffer),每个线程对应一个私有的TLAB
    • 《Java虚拟机规范》中对java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上,从实际使用的角度看,“几乎”所有的对象的实例都在这里分配内存 (‘几乎’是因为可能存储在栈上)
    • 数组或对象永远不会存储在栈上,因为栈帧中保存引用,这个引用指向对象或者数组在堆中的位置
    • 在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除
    • 堆是GC执行垃圾回收的重点

    细分内存结构

      Java7:新生代+养老代+永久代

      Java8:新生代+养老代+元空间

     

    附:JVM学习目录

     

  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/ding-dang/p/13073219.html
Copyright © 2011-2022 走看看