校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > java语言 > jvm内存结构
题目

Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?

解答

JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。
堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象。一直到垃圾收集器把这些对象回收掉之前,他们会一直占据堆内存空间。
永久代是用于存放静态文件,如Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate 等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类,永久代中一般包含:
类的方法(字节码...)
类名(Sring对象)
.class文件读到的常量信息
class对象相关的对象列表和类型列表 (e.g., 方法对象的array).
JVM创建的内部对象
JIT编译器优化用的信息

C 6条回复 评论
Peach

太感谢了! 今年招聘形式特别不好 特别迷茫 感觉给我指了一个努力的方向! 特别感谢!!

发表于 2023-06-01 23:00:00
0 0
采苓子

想要学 UI,自学的方法遍地是,网上教程一搜一大堆

发表于 2021-09-13 11:10:00
0 0
Louis

永久代是用于存放静态文件,如Java类、 方法等。永久代中一般包含:
●类的方法(字节码...)
●类名(Sring对象)
●.class文 件读到的常量信息
●class对 象相关的对象列表和类型列表(e.g., 方法对象的array).
●JVM创建的内部对象
●JIT编译器优化用的信息

发表于 2020-07-16 11:53:54
0 0
Louis

JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。
堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象。一直到垃圾收集器把这些对象回收掉之前,他们会一直占据堆内存空间。

发表于 2020-07-16 11:53:45
0 0
coderpwh

这个“堆”并不是数据结构意义上的堆( Heap (data structure) ,一种有序的树),而是动态内存分配意义上的堆——用于管理动态生命周期的内存区域。
永久代就是Java内存分配中的一块区域,表示的是持续使用的一些资源信息,比如class名、method等,这块区域里面的内存对GC的影响不大,并不是GC的首要考虑内容

发表于 2020-06-22 16:55:14
0 0
西窗

Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程所共享的一块内存区域,在虚拟机启动时创建。
此内存区域的唯一目的就是存储对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中描述是:The heap is the runntime data area from which memory for all class instances and arrays is allocated。也就是说是在Java堆上进行分配实例对象和数组的。
有一种说法是 使用 永久代 来实现方法区。具体可以参考 “深入理解Java虚拟机”中对于堆的介绍

发表于 2020-06-22 16:54:56
0 0