首页 > 试题广场 >

请回答关于Java内存管理的以下问题:

[问答题]
Java内存管理 
(1)请描述java的内存管理原理 
(2)请描述java的内存分区 
(3)请描述java的对象生命周期,以及对象的访问?
(1)请描述java的内存管理原理
Java的内存管理就是对象的分配和释放
在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(Garbage Collection,GC)
完成的 
(2)请描述java的内存分区

每个区干嘛的,百度都有详细讲解,自行百度吧


(3)请描述java的对象生命周期,以及对象的访问?
生命周期:  
1.创建阶段(Created)
2.应用阶段(In Use):一旦对象被创建,并被分派给某些变量赋值,这个对象的状态就切换到了应用阶段
3.不可见阶段(Invisible):例如我在for里面定义了i for循环break了就不能访问i
4.不可达阶段(Unreachable):对象处于不可达阶段是指该对象不再被任何强引用所持有。
5.收集阶段(Collected):当垃圾回收器发现该对象已经处于“不可达阶段”并且垃圾回收器已经对该对象的内存空间重新分配做好准备时,则对象进入了“收集阶段”。
6.终结阶段(Finalized):当对象执行完finalize()方法后仍然处于不可达状态时,则该对象进入终结阶段。在该阶段是等待垃圾回收器对该对象空间进行回收。
7.对象空间重分配阶段(De-allocated):垃圾回收器对该对象的所占用的内存空间进行回收或者再分配了,则该对象彻底消失了,称之为“对象空间重新分配阶段”


句柄访问方式:java堆中将划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息。 指针访问方式:reference变量中直接存储的就是对象的地址,而java堆对象一部分存储
了对象实例数据,另外一部分存储了对象类型数据
编辑于 2017-02-21 13:40:19 回复(0)
java的内训管理是由java虚拟机jvm进行的,不需要程序员管理,而将精力更多的放在业务逻辑上,而同时也限制对内存的手动干预。
发表于 2020-03-05 22:26:10 回复(0)
这问的太多了。。
新生代 Eden Survivor * 2  Eden 区 和 fromSurvivor Minor GC 使用Copy算***复制到另一个ToSurvivor,如果放不下则会进入老年代,
大对象直接进入老年代,存活代数高的对象进入老年代,存活对象中相同年龄的对象超过Survivor一半进入老年代
老年代Full GC 采用标记清除算法或者标记整理算法。
方法区,java堆,常量池,虚拟机栈,程序计数器,本地方法栈
加载, 验证,准备, 解析, 初始化,使用,卸载
发表于 2017-08-01 15:10:07 回复(0)