JVM的内存模型和优化方式

一、JVM的内存模型

1.图片 其中s0,s1为幸存区; 当有一个对象产生时,如果是大对象,那么会分配到老年代中,其他对象会分配到年轻代的Eden区,大对象分配到老年代是为了让他不及时被垃圾回收器回收,释放它占用过的内存,小的对象在经过15次GC后进入老年代。当GC执行时,对象会放在s0中,为这个对象加1,当第二次GC后,s0中的对象进入s1中,又为当前对象加1,知道如此反复加到15时,对象进入老年代。

为何大对象进入老年代

1假设大对象最后会晋升老年代,而新生代是基于复制算法来回收垃圾的,由两个Survivor区域配合完成复制算法,如果新生代中出现大对象且能屡次躲过GC,那这个对象就会在两个Survivor区域中来回复制,直至最后升入老年代,而大对象在幸存区里来回复制移动,就会消耗更多的时间; 2而且大对象在没有被GC回收时,在幸存区中来回移动时(因为幸存区中的内存比较小)会占用大量幸存区的内存,导致后续不够15此的对象进入老年代,老年代对象多了,会导致频繁的GC,而老年代GC消耗资源>年轻代消耗的资源

二、JVM的优化方式(减少GC机制的执行)

1.设置一个合适的堆大小 2.设置大对象直接进入老年代

暂时就写这么多 后续以后了解到在进行补充!!!!!!!!!!!!!!!!!!!!!!!

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

(转载)Java内存区域(运行时数据区域)和内存模型(JMM) - czwbig

转载自:Java内存区域和内存模型是不一样的东西,内存区域是指Jvm运行时将数据分区域存储,强调对内存空间的划分。而内存模型(JavaMemoryModel,简称JMM)是定义了线程和主内存之间的抽象关系,即JMM定义了JVM在计算机内存(RAM)中的工作方式,如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java

JAVA工程师成神道路

一、基础篇1.1JVM1.1.1.Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id133http://ifeve.com/jmmfaq/1.1.2.了解JVM各种参数及调优1.1.3.

Java工程师成神之路~

一、基础篇1.1JVM1.1.1.Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id133http://ifeve.com/jmmfaq/1.1.2.了解JVM各种参数及调优1.1.3.

Java工程师成神之路

一、基础篇1.1JVM1.1.1.Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id133http://ifeve.com/jmmfaq/1.1.2.了解JVM各种参数及调优

Java运行时数据区域

两个名词的对比java内存模型定义了线程和主内存之间的抽象关系,即Jvm在计算机内存中的工作方式,控制线程之间的通信。java内存区域内存区域是指Jvm运行时将数据分区域存储,强调对内存空间的划分。今天主要总结一下Java运行时的数据区域Java运行时数据区域