system.gc要点整理
所属分类 java
浏览量 1302
system.gc 做一次full gc
system.gc 暂停整个进程
system.gc 一般情况要禁用 -XX:+DisableExplicitGC
system.gc 使用 cms 可设置 -XX:+ExplicitGCInvokesConcurrent 来做一次稍微高效点的GC ( 效果比Full GC要好些 )
system.gc 常见场景 RMI/NIO 下的堆外内存分配等
堆外内存的释放,依赖 full gc
禁用之后可能会导致
java.lang.OutOfMemoryError: Direct buffer memory
Runtime.getRuntime().gc()
Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects
in order to make the memory they currently occupy available for quick reuse.
stop the world STW
VMThread jvm有专门的线程不断轮询某个队列,这个队列里主要是存一些VM_operation的动作,
比如最常见的就是内存分配失败要求做GC操作,
执行GC 暂停业务线程进入安全点
CMS GC 分为两种模式 background和foreground,
background 后台运行,与业务线一起执行,
old区内存占比超过某阈值的时候就会触发一次background式的cms gc
业务线程请求分配内存,但是内存不够了,可能触发一次foreground cms gc,
这个过程就必须要等内存分配到了线程才能继续执行,因此整个过程必须是STW的,
整个过程暂停应用,为了提高效率,只走其中一些阶段,省下来的阶段主要是并行阶段,
Precleaning、AbortablePreclean,Resizing这几个阶段都不会执行,
foreground 方式的 cms gc 暂停时间比较旧,应尽量避免
background CMS GC 暂停阶段主要是YGC+CMS_initMark+CMS_remark
堆外内存分配
ByteBuffer bf = ByteBuffer.allocateDirect(size);
-verbose:gc -XX:+PrintGCDetails -XX:NativeMemoryTracking=detail -XX:MaxDirectMemorySize=100M
-XX:+ExplicitGCInvokesConcurrent
上一篇
下一篇
tomcat8.5启动过程调试
fastjson使用技巧
java获取当前jvm进程id
String.intern要点整理
/proc/PID/status进程信息说明
java中的非阻塞IO和异步IO