首页   快速返回

system.gc要点整理     所属分类 java
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