堆
知识点
- 多线程共享一个堆内存,且是最大的内存空间
- Java内存管理的核心区域
- 在JVM启动的时候创建、大小确定(但是可以调节)
- 《Java虚拟机规范》规定:堆可以处于物理上不连续的内存空间中,当在逻辑上它应该被视为连续的
- 其实在堆中,存在线程私有的缓冲区------》Thread Local Allocation Buffer, TLAB.
- “几乎”所有的对象实例都在这里分配内存。
- 栈帧中只会保留引用,这个引用指向对象或者数组的堆中的位置
- 方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除
- 堆,是GC执行垃圾回收的重点区域
步骤:
- .class文件通过类加载到方法区中
- 栈根据方法区的类,实例化对象,对象的信息存储在堆当中
堆内存----细分
JDK7
新生区:Edn区、Survivor1、Survivor2
养老区:
永久区:--------在方法区当中
JDK8
新生区:Edn区、Survivor1、Survivor2
养老区:
元空间:--------在方法区当中
设置堆空间大小
“-Xms”
“-Xmx”