北大荒建设集团有限公司网站,陕西科技网站建设,推广宝,wordpress修改ip原生内存最佳实践
内存占用
jVM使用的原生内存和堆内存总和就是一个应用程序的总内存——操作系统角度 jvm启动时候加载的类路径下的jar文件相关的内存和系统其他进程共享资源的可能
测量内存占用
线程是个例外——每当创建一个线程操作系统都会分配一些原生内存存储线程栈…原生内存最佳实践
内存占用
jVM使用的原生内存和堆内存总和就是一个应用程序的总内存——操作系统角度 jvm启动时候加载的类路径下的jar文件相关的内存和系统其他进程共享资源的可能
测量内存占用
线程是个例外——每当创建一个线程操作系统都会分配一些原生内存存储线程栈数据。线程栈空间在创建的时候就分配 操作系统可能会因为RSS小于提交内存难以将JVM全部信息转入物理内存——出现page out的情况
最小化内存占用
堆——平衡堆的大小限制程序占用。 线程栈——平衡线程栈的大小 代码缓存——通过原生内存来保存编译后的代码 原生库分配——自定义分配原生内存
原生内存跟踪
开启标志 -XX:NativeMemoryTrackingoff|summary|detail 默认关闭 原生内存泄漏可能无法被NMT检测处于JVM层面上的分配
获取原生内存详情 jcmd process_id VM.native_memory summary 原生内存分配提交和保留 Native Memory Tracking: Total: reserved2014980KB, committed732284K
共享库原生内存
原生内存和压缩解压
InflateDeflate进行zipgzip底层是通过不同架构实现的原生库的调用执行原生库可能分配更多的原生内存 当发生内存泄漏可以寻找堆转储找到如果直方图显示大量占用了内存
原生NIO缓冲区
NIO字节缓冲区可以通过ByteBuffer的方法直接分配堆外内存 原生字节缓冲区可以允许原生代码和java代码之间不产生复制下的共享数 不需要在jvm和传输数据的c库之间复制数据——0拷贝 如果使用堆字节缓冲区则必须进行复制逻辑 平衡注意直接分配原生内存带来的内存泄漏的可能性 直接分配字节缓冲区的限制来源于jvm的限制 字节缓冲区的切片导致内存碎片字节缓冲区的切片不能被压缩
在linux中内存分区的数量是通过系统中核心的数量得出的 /etc/sysctl.conf 配置MALLOC_ARENA_MAX 默认是核心数 * 8 -----内存溢出可能有关系—看看设置2或4变分段区空间很小 sysctl -p 强制系统执行当前参数