标签:常量 问题 缓存 调整 整理 还需要 jvm 无法运行 清除
内存资源是有限的,当所需内存不能满足时,需要把不再使用的对象清除掉,否则JVM将无法运行下去
判断对象是否是垃圾,有两种方式:1是标记引用计数,2是根部可达,第一种存在环形引用问题,第二种是JVM目前采用的方式
1栈中引用的对象,2方法区变量,3方法区常量,4JNDI中引用的对象
1复制:适用于大部分对象都不再引用
2 标记清除:效率相对低,容易产生碎片
3标记清除整理:效率相对低,不会产生碎片
4并发标记清除:产生碎片,效率相对高些,减少业务暂停时间
对于需要减少暂停业务,内存分配的越大,垃圾回收的时间就越长,业务暂停时间就越长
对于需要充分发挥吞吐量的业务,内存分配的大,垃圾回收时间随长,但整体效率要高
内存分配是一个不断调整、观察的过程,不是一蹴而就、一成不变的
由于存在大部分对象存活时间都很短,根据不同对象存活时间分割在不通区域,提高回收效率,降低回收时间
增加内存空间率用率,减少垃圾回收次数
对应用造成卡顿的主要来自于老年代的回收,对程序开发者来说,减少不必要的对象的创建,对于JVM可以使用并行垃圾回收和CMS(并发标记清除)收回器;
对于非逃逸对象,可以采用栈来进行存储,减少垃圾回收次数;
对于垃圾回收,还需要进行内存分配参数的调整,这是一个长时间观察和不断改变的过程。
栈:先进后出,堆:先进先出
栈:存储在一级缓存或者二级缓存上,堆:存储在内存上
栈:存储的是cpu要执行的指令和数据,堆:只存储数据
栈:存储空间较小,价格相对贵一些,堆:存储空间大,价格相对便宜
栈:存储空间较小,价格相对贵一些
标签:常量 问题 缓存 调整 整理 还需要 jvm 无法运行 清除
原文地址:https://www.cnblogs.com/lilei2blog/p/9585627.html