netty和jvm 虚拟机参数的 XX:+DisableExplicitGC 注意事项

在使用netty时,经常出现内存溢出,经查询是这个坑:

netty 使用的nio 和 jvm
中的 XX:+DisableExplicitGC配置的冲突导致的,具体经过:nio 使用直接内存区域  Direct
Memory内存回收和其他内存回收有点区别。Java堆内放置的是direct memory 引用,正常情况下当在young gc
的时候会把这个已死的引用回收,进而也回收了native memory 区域 , 但是有些移动到old gen区中的,在没有发生full
gc时候这个对象一直没有被回收,然后direct memory
应该会累积。

另外当在为DirectByteBuffer分配空间过程中发现直接内存不足时会显式调用System.gc(),以期通过full
GC来强迫已经无用的DirectByteBuffer对象释放掉它们关联的native memory ,
这个可以从java.nio的源码中可以分析到(DirectByteBuffer .class Bits.class)

原文地址:https://www.cnblogs.com/fypy/p/8252909.html

时间: 2024-11-16 12:15:42

netty和jvm 虚拟机参数的 XX:+DisableExplicitGC 注意事项的相关文章

JVM虚拟机参数

追踪参数: 打印GC简要信息 -XX:+PrintGC 打印GC详细信息 -XX:+PrintGCDetails 打印CG发生的时间戳 -XX:+PrintGCTimeStamps 指定GC log的位置 -Xloggc:log/gc.log 打印类的加载情况 -XX:+TraceClassLoading 堆参数: -Xmx 最大堆 -Xms 最小堆 -Xmn 新生代大小 -XX:NewRatio 新生代(eden+2*s)和老年代(不包含永久区)的比值 4 表示 新生代:老年代=1:4,即年轻

深入理解JVM虚拟机10:JVM常用参数以及调优实践

微信公众号[Java技术江湖]一位阿里 Java 工程师的技术小站.作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux.网络.多线程,偶尔讲点Docker.ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”Java“即可领取 Java基础.进阶.项目和架构师等免费学习资料,更有数据库.分布式.微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南.Java程序员面试指

JVM实用参数(六) 吞吐量收集器

JVM实用参数(六) 吞吐量收集器 原文链接 本文连接 译者:张军  校对:梁海舰 在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准: 吞吐量越高算法越好 暂停时间越短算法越好 首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(throughput)和暂停时间(pause times). JVM在专门的线程(GC threads)中执行GC. 只要GC线程是活动的,它们将与应用程序线程(application threads)争用当前可用CPU的时钟周期

JVM 运行参数 & 代码监控

1.Java代码监控 JDK提供java.lang.management包, 其实就是基于JMX技术规范,提供一套完整的MBean,动态获取JVM的运行时数据,达到监控JVM性能的目的. package com.agan.jvm; import java.lang.management.*; import java.util.Arrays; import java.util.List; public class JVMDemo { public static void main(String[]

Java虚拟机3:常用JVM命令参数

http://www.cnblogs.com/xrq730/p/4830692.html 之后写的东西就会用到虚拟机参数了,现在这里汇个总自己平时用到的.看到的一些虚拟机参数.现在看不懂没关系,反正之后都会用到的: (1)-Xms20M 表示设置堆容量的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置堆容量的最大值为20M,必须以M为单位.将-Xmx和-Xms设置为一样可以避免堆自动扩展.大的项目-Xmx和-Xms一般都要设置到10G.20G甚至还要高 (3)-verbose:gc

Java虚拟机学习3、常用JVM命令参数

之后写的东西就会用到虚拟机参数了,现在这里汇个总自己平时用到的.看到的一些虚拟机参数.现在看不懂没关系,反正之后都会用到的: (1)-Xms20M 表示设置堆容量的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置堆容量的最大值为20M,必须以M为单位.将-Xmx和-Xms设置为一样可以避免堆自动扩展.大的项目-Xmx和-Xms一般都要设置到10G.20G甚至还要高 (3)-verbose:gc 表示输出虚拟机中GC的详细情况 (4)-Xss128k 表示可以设置虚拟机栈的大小为12

System.gc()和-XX:+DisableExplicitGC启动参数,以及DirectByteBuffer的内存释放

我之前的一篇博客:java中使用堆外内存,关于内存回收需要注意的事和没有解决的遗留问题(等大神解答)  介绍了java堆外内存的使用,以及堆外内存的释放.那篇博客遗留了一个问题:DirectByteBuffer究竟是如何释放堆外内存的?本文主要是解决下那篇博客的遗留问题. 首先我们修改下JVM的启动参数,重新运行之前博客中的代码.JVM启动参数和测试代码如下: -verbose:gc -XX:+PrintGCDetails -XX:+DisableExplicitGC -XX:MaxDirect

Java虚拟机详解----常用JVM配置参数

本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多技术含量. 既然如此,那么在IDE的控制台打印GC日志是必不可少的了.现在就告诉你怎么打印. (1)如果你用的是Eclipse,打印GC日志的操作如下: 在上图的箭头处加上-XX:+PrintGCDetails这句话.于是,运行程序后,GC日志就可以打印出来了: (2)如果你用的是IntelliJ

Java虚拟机详解03----常用JVM配置参数

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4736162.html 本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多技术含量. 既然如此,那么在IDE的控制台打印GC日志是必不可少的了.现在就