开发者社区> 问答> 正文

与Java程序运行相关的JVM内存模型及垃圾收集算法有哪些?

与Java程序运行相关的JVM内存模型及垃圾收集算法有哪些?

展开
收起
我是小美女 2021-10-29 23:38:18 1316 0
2 条回答
写回答
取消 提交回答
  • JVM将内存划分为:

    New(年轻代):年轻代用来存放JVM刚分配的java对象 Tenured(年老代):年轻代中经过垃圾回收没有回收掉的对象将被copy到年老代 Perm(永久代):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M足矣,设置原则是预留30%的空间。

    New又分为几个部分:

    Eden:Eden用来存放JVM刚分配的对象 Survivor1 Survivor2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间copy,当满足某个条件,比如Copy次数,就会被Copy到Tenured.显然Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。

    垃圾回收算法 垃圾回收算法分为三类,都是基于标记-清除(复制)法:

    Serial算法,单线程 并行算法 并发算法

    JVM会根据机器的硬件配置对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代选择并行算法,关于选择细节请参考JVM调优文档。

    稍微解释下的是,并行算法是用多线程进行垃圾回收,回收期间会暂停程序的执行,而并发算法,也是多线程回收,但期间不停止应用执行。所以,并发算法适用于交互性高的一些程序。经过观察,并发算法会减少年轻代的大小,其实就是使用了一个大的年老代,这反过来跟并行算法相比吞吐量相对较低。

    垃圾回收动作何时执行?

    当年轻代内存满时,会引发一次普通的GC,该GC仅回收年轻代,需要强调的是年轻代是指Eden代满,Survivor满不会引发GC 当年老代满时会引发Full GC,Full GC将会同时回收年轻代年老代。 当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载。

    2022-02-23 10:05:19
    赞同 展开评论 打赏
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。

    您好,根据java虚拟机规范,JVM将内存划分为:

    New(年轻代):年轻代用来存放JVM刚分配的java对象
    Tenured(年老代):年轻代中经过垃圾回收没有回收掉的对象将被copy到年老代
    Perm(永久代):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M足矣,设置原则是预留30%的空间。
    
    

    New又分为几个部分:

    Eden:Eden用来存放JVM刚分配的对象
    Survivor1
    Survivor2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间copy,当满足某个条件,比如Copy次数,就会被Copy到Tenured.显然Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。
    
    

    垃圾回收算法 垃圾回收算法分为三类,都是基于标记-清除(复制)法:

    Serial算法,单线程
    并行算法
    并发算法
    
    

    JVM会根据机器的硬件配置对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代选择并行算法,关于选择细节请参考JVM调优文档。

    稍微解释下的是,并行算法是用多线程进行垃圾回收,回收期间会暂停程序的执行,而并发算法,也是多线程回收,但期间不停止应用执行。所以,并发算法适用于交互性高的一些程序。经过观察,并发算法会减少年轻代的大小,其实就是使用了一个大的年老代,这反过来跟并行算法相比吞吐量相对较低。

    垃圾回收动作何时执行?

    当年轻代内存满时,会引发一次普通的GC,该GC仅回收年轻代,需要强调的是年轻代是指Eden代满,Survivor满不会引发GC
    当年老代满时会引发Full GC,Full GC将会同时回收年轻代年老代。
    当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载。
    
    2021-10-29 23:51:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何通过 Serverless 提高 Java 微服务治理效 立即下载
JVM的GC 立即下载
基于JVM的脚本语言开发、运用实践 立即下载