|名词定义|
堆是Java为类对象的内存分配工作所设置的一种运行时数据区,是一种通用性的内存池(也存在于RAM中),用于存放所有的JAVA对象。
应用程序在运行中所创建的所有类实例或者数组都放在堆中,并由应用所有的线程共享。Java的对象通过new、newarray、anewarray和multianewarray等指令在堆中创建内存空间,它们在堆中不需要程序代码显式释放,而是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于是在运行时动态分配内存,存取速度较慢。
堆内存:保存的是对象的具体信息,在程序中堆内存空间的开辟是通过new完成的;
堆分区内容
1.存储的全是对象,每个对象都包含一个与之对应的class信息(我们常说的类类型,Clazz.getClass()等方式获取),class目的是得到操作指令。
2.JVM只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身。【这里的‘对象’不包括基本数据类型】
特点
可以动态地分配内存大小、比较灵活,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
|参考资料|
[1] https://www.jianshu.com/p/bfa5337ef59e
[2] https://blog.csdn.net/jianesrq0724/article/details/80309690