首页 > 编程知识 正文

java栈有没有垃圾回收,java手动回收垃圾

时间:2023-05-04 09:53:16 阅读:25388 作者:224

数据共享有堆栈、寄存器和PC,线程共享有堆、全局变量、静态变量和方法区域。

代码、简单变量和结构将放在堆栈中,而对象和装箱数据将放在堆栈中。 回收了堆内存。

年轻一代的话,最先制作的对象都被安置在eden区,但是把年轻一代分成三个部分,主要是为了让生命周期短的对象尽量留在年轻一代。 如果eden区无法申请空间,则进行minorGC,并将生存对象复制到survior。 上一代主要存储生命周期较长的对象,如缓存对象。 具体的jvm内存回收过程说明如下。

1、对象在Eden区完成内存分配;

2、伊甸园区满后,创建对象,由于不能申请空间,触发minorGC进行young (伊甸园1服务)区垃圾回收

3、对于minorGC,Eden不能回收的对象放入空的survivor (Eden一定是空的),另一个survivor不能回收到GC的对象也放入该survivor,总是一个survivor为空

4、在步骤3的时候,如果发现survivor已经满了,就复制这些对象去old区。 或者,虽然survivor未满,但某些对象已经足够old,可以放入old区XX:MaxTenuringThreshold中;

5、Old区满后进行全GC;

Java进行gc时,Java除gc以外的其他进程由于需要gc而暂停进行,发生停止-热世界,此时只剩下gc线程的执行。

因此,在优化gc时主要减少停止世界的发生。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。