Java Max Direct Memory Size设置

MaxDirectMemorySize的默认值 MaxDirectMemorySize 默认值 阅读详情

在上一篇Java Executor Service中我提到了我们的task因为OutofMemoryError: Direct Buffer Memory被Java Executor Service意外中止。接下来就该研究为什么系统会出现OOM Error。
一开始怀疑内存设置不够。那么我们就对DirectMemory设置进行了调查。
我们的系统中没有使用MaxDirectMemorySize参数设置DirectMemoryArea大小,那么我们肯定是使用了系统的默认配置了。JVM的默认配置是什么呢?我们来看看sun.misc.VM.java里面是如何设置默认的directmemorysize的

public static long maxDirectMemory() {  
    if (booted)  
        return directMemory;  

    Properties p = System.getProperties();  
    String s = (String)p.remove("sun.nio.MaxDirectMemorySize");  
    System.setProperties(p);  

    if (s != null) {  
        if (s.equals("-1")) {  
            // -XX:MaxDirectMemorySize not given, take default  
            directMemory = Runtime.getRuntime().maxMemory();  
        } else {  
            long l = Long.parseLong(s);  
            if (l > -1)  
                directMemory = l;  
        }  
    }  

    return directMemory;  
}  

最重要的就是以下这句:directMemory的大小由JVM运行时的最大内存来决定。

 directMemory = Runtime.getRuntime().maxMemory()

那么maxMemory()是用native来实现的,我们来看看java文档是如何说说它的返回。
*The maxMemory() method returns the maximum amount of memory that the VM
will attempt to use, allowing applications to better manage memory load.
If the implementation-dependent -Xmx flag is used then this method will
return that value.*
可见默认设置和Heap的Size差不多。在我们系统中使用了第三方lib,要求使用最少1G的Direct Memory Size。而我们系统中Xmx设置是512M。所以我们加入了MaxDirectMemorySize参数来指定DirectMemoryArea大小。

一文搞懂堆外内存(模拟内存泄漏) 平时编程时,在Java中创建对象,实际上是在堆上划分了一块区域,这个区域叫堆内内存。使用这-Xms -Xmx来指定新生代和老年代空间大小的初始值和最大值,这初始值和最大值也被称为 Java堆的大小,即堆内内存大小。这个堆内内存完全受 JVM管理,JVM有垃圾回收机制,所以我们一般不必关系对象的内存如何回收。剖开JVM内存模型,来看下其堆划分:由图可知Java8使用元空间替代永久代且元空间放在堆外内存上,这是为啥?类的元数据信息常用到,在GC时回收效率偏低。类的元数据信息。... 阅读详情

相关推荐

Kafka处理大文件出现内存溢出 java.lang.OutOfMemoryError: Direct buffer memory

这篇文章是我在粗略学习kafka时遇到的问题和网上查阅过的资料。kafka和java我都不是很熟悉,只知道基本的概念。文章中可能有疏漏和错误的地方,大家参考一下就好。有错误拜托大家指正! broker端 配置文件需要配置的参数 message.max.bytes : kafka 会接收单个消息size的最大限制, 默认为1M左右。如果producer发送比这个大的消息,kafka默认会丢掉。p...

DreamWeaver_Zhou 9989

JAVA堆外内存分析

1、定义了DirectByteBuffer的操作byte的都是申请了堆外内存,申请的堆外内存需要手动回收,重置最大可用堆外内存大小;2、堆外内存泄露并不会提现在JVM内存使用上,排查方式可以通过JConsole检测堆外内存是否一直增长,之后查询系统中使用了DirectByteBuffer的地方;

熊浪的博客 5682

别让Direct buffer memory坑了你!JDK 1.8堆外内存监控与调优全指南

本文深入解析JDK 1.8中Direct buffer memory的监控与调优策略,帮助开发者有效应对OutOfMemoryError问题。从堆外内存原理、监控工具链搭建到泄漏定位方法,提供全面的解决方案和调优技巧,适用于Netty、gRPC等高性能框架的内存管理优化。

weixin_29196613的博客 288

-XX:MaxDirectMemorySize

Full GC。

张紫娃的博客 7684

一文写全OOM

在Java应用程序中,常见的OOM(OutOfMemoryError)类型主要包括以下七种。

东皋长歌的专栏 921

网络可视媒体的智能计算-胡事民

本文为胡事民教授在山大做报告的笔记,现场见下图: 可视媒体是承载视觉信息的媒体类型,如图像、视频等,它具有网络化、海量和无序涌现等特征。 可视媒体计算的研究意义 可视媒体作为一种信息承载的介质,是用来表达语义信息的。那么就有一种介质与信息之间相互转化的问题。转化方向正反两种,举个栗子说明一下: 1. 可视媒体→→\rightarrow语义信息:比如看到画面,理解其中发生的事件、各主题之...

gdymind的博客 2450

聊聊jvm的-XX:MaxDirectMemorySize

序 本文主要研究一下jvm的-XX:MaxDirectMemorySize -XX:MaxDirectMemorySize -XX:MaxDirectMemorySize=size用于设置New I/O(java.nio) direct-buffer allocations的最大大小,size的单位可以使用k/K、m/M、g/G;如果没有设置该参数则默认值为0,意味着JVM自己自动给NIO direct-buffer allocations选择最大大小 System.initPhase1 ja

做的过程自我总结 1万+

Spring Boot与Apache Ignite集成:构建高性能分布式缓存和计算平台

Apache Ignite是一个高性能的分布式内存计算平台,支持内存缓存、分布式计算、流处理和机器学习等功能。它提供了低延迟的数据访问和强大的计算能力,适用于需要高性能和可扩展性的应用。将Apache Ignite集成到Spring Boot应用中,可以显著提高应用的性能和可扩展性。Spring Boot的简单配置和Ignite的强大功能相结合,使得开发和部署更加高效。首先,创建一个新的Spring Boot项目。可以通过Spring Initializr(https://start.spring.io/)

九天的专栏 2142

Java的Direct Memory与IO

ByteBuffer的源码中有这样一段注释: A byte buffer is either direct or non-direct. Given a direct byte buffer, the Java virtual machine will make a best effort to perform native I/O operations directly upon it. That is, it will attempt to avoid copying the buffer's co

傅红雪的专栏 417

【SAP-MDG】工作流任务配置实战:从基础配置到代理分配详解

本文详细解析了SAP MDG工作流任务配置的全流程,从基础配置到代理分配的关键操作。通过实战案例和最佳实践,帮助用户掌握Configure Workflow Tasks的核心技巧,包括环境检查、代理分配、SWDD事务码使用及常见问题排查,提升主数据管理效率。

weixin_33738555的博客 248

C++结合大漠插件实现DNF自动化脚本:从原理到实战

自动化技术通过模拟用户操作,实现重复性任务的自动执行,其核心原理在于对系统输入输出接口的精确控制。在Windows平台,这通常涉及窗口管理、图像识别与键鼠模拟等技术。这些技术为软件自动化测试、办公流程自动化及特定场景的辅助工具开发提供了工程实践基础。大漠插件作为国内广泛使用的Windows自动化开发组件,封装了上述底层操作,显著降低了开发门槛。通过其提供的COM接口,开发者可以高效实现窗口绑定、后台找图找色及内存读写等关键功能。本文以《地下城与勇士》为例,详细解析如何利用C++集成大漠插件,构建一个稳定、高

weixin_34185512的博客 567

kafka假死 和解决 Java Max Direct Memory Size 问题

一、前言 早上醒来打开微信,同事反馈kafka集群从昨天凌晨开始写入频繁失败,赶紧打开电脑查看了kafka集群的机器监控,日志信息,发现其中一个节点的集群负载从昨天凌晨突然掉下来了,和同事反馈的时间点大概一致,于是乎就登录服务器开始干活。 二、排错 1、查看机器监控,看是否能大概定位是哪个节点有异常 技术分享 2、根据机器监控大概定位到其中一个异常节点,登录服务器查看kafka日...

DreamWeaver_Zhou 4284

告别配置噩梦:用Vcpkg三行命令为Easy3D自动安装Boost、CGAL和Qt(VS2022实测)

本文详细介绍了如何使用Vcpkg工具在VS2022环境下为Easy3D项目一键安装Boost、CGAL和Qt等依赖库,解决传统手动配置的复杂性问题。通过三行简单命令即可自动完成下载、编译和路径配置,大幅提升开发效率,特别适合C++开发者快速搭建3D图形开发环境。

weixin_42525582的博客 209

SolrCore Initialization Failures - Max direct memory is likely too low

org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: The max direct memory is likely too low. Either increase it (by adding -XX:MaxDirectMemorySize=g -XX:+UseLargePages to your c...

weixin_34119545的博客 403

Win11系统下Notepad++右键菜单失效?3种修复方法实测有效(附注册表备份指南)

本文针对Windows 11系统中Notepad++右键菜单失效的常见问题,提供了三种经过实测有效的修复方法。核心解决方案包括使用官方NppShell.dll重新注册、手动修复注册表项以及系统级问题排查,并详细说明了操作前的注册表备份指南,确保修复过程安全可靠。

m2n3b4v5c6的博客 328

数学建模学习(78):多输入多输出回归预测模型(结合XGBoost实现)

多输入多输出回归预测问题求解

全栈川川 8129

java direct memory_Java VM.maxDirectMemory方法代码示例

import sun.misc.VM; //导入方法依赖的package包/类static void reserveMemory(long size, int cap) {if (!memoryLimitSet && VM.isBooted()) {maxMemory = VM.maxDirectMemory();memoryLimitSet = true;}// optimist...

weixin_35098081的博客 369

MOSFET雪崩特性参数解析

但是,一些电源在输出短路时,初级中会产生较大的电流,加上初级电感,器件就会有雪崩损坏的可能,因此在这样的应用条件下,就要考虑器件的雪崩能量。对于那些在MOSFET的D和S极产生较大电压的尖峰应用,就要考虑器件的雪崩能量,电压的尖峰所集中的能量主要由电感和电流所决定,因此对于反激的应用,MOSFET关断时会产生较大的电压尖峰。雪崩击穿能量标定了器件可以容忍的瞬时过冲电压的安全值,其依赖于雪崩击穿需要消散的能量。EAS单脉冲雪崩击穿能量, EAS标定了器件可以安全吸收反向雪崩击穿能量的高低。

Airer_00的博客 806

调整IoTDB堆内存

half_ 小于 quarter_ 所以 max_heap_size_in_mb = quarter_。最关键的是 MAX_DIRECT_MEMORY_SIZE ,他等于MAX_HEAP_SIZE变量。quarter_ 小于65536。假设物理内存为8G,那么half_ 为4096 quarter_为2048。system_memory_in_mb 很明显就是系统内存,单位是M。再往上翻又等于 max_heap_size_in_mb M大小。quarter_ 四分之一内存, half_ 一半内存。

zjy660358的专栏 1308

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

一次现网问题定位-java.lang.OutOfMemoryError: Direct buffer memory

sun.nio.ch.IOUtil#read(java.io.FileDescriptor, java.nio.ByteBuffer, long, sun.nio.ch.NativeDispatcher)读try {return n;} }IOUtil取文件内容时,会分配DirectByteBuffer作为字节容器,并且分配的DirectByteBuffer会被缓存下来,因此要避免传入的ByteBuffer过大。IOUtil引用的地方如下,使用这些类或方法时,要特别注意。

shuxiaohua的博客 1456

如何快速用 tf_efficientnet_b1.ap_in1k 提取图像 Embedding:1280 维特征向量与图片检索完整指南

tf_efficientnet_b1.ap_in1k 是 timm 提供的 EfficientNet-B1 图像分类模型,经过对抗训练(AdvProp)在 ImageNet-1k 上训练,可以直接输出 1280 维图像 Embedding 特征向量,非常适合用来做以图搜图、相似图片检索等任务。下面带你从零理解它的原理、安装方式,到实际提取 Embedding 并构建图片检索系统。 ## 一、模型

gitblog_01101的博客 859

从HotSpot源码理解DirectByteBuffer

1. 前言  自从java在1.4版本后有了NIO,direct memory就变得如此的常见。在NIO中,direct memory充当缓冲区,使用的是本机内存而不是堆内存。这种方式减少了数据在java堆和本机堆之间的复制操作,一定程度上提高了数据流转的效率。但是direct memory的分配和回收性能不高,不建议频繁的分配direct memory。  通常我们都是通过allocateDir...

wajueji的博客 231

Java-buildpack-memory-calculator参数配置全攻略:提升容器应用性能的7个技巧

Java-buildpack-memory-calculator是一款专为Cloud Foundry平台设计的JVM内存计算工具,能够帮助开发者根据应用需求和容器资源自动优化JVM内存参数配置,避免OOM错误并提升应用性能。本文将分享7个实用配置技巧,让你轻松掌握这个工具的核心用法。 ## 1. 理解基础参数:从总内存分配开始 总内存参数是所有配置的基础,它定义了容器可分配给JVM的最大内存资

gitblog_00042的博客 668

从源码到实践:Java-buildpack-memory-calculator核心算法深度解析

Java-buildpack-memory-calculator是Cloud Foundry生态中一款关键的JVM内存配置工具,它能根据应用需求和容器资源自动计算最优JVM内存参数,确保应用在不超容器内存限制的前提下高效运行。本文将深入解析其核心算法原理、实现逻辑及实际应用方法,帮助开发者理解内存分配的底层逻辑。 ## 工具核心价值:解决容器化JVM内存难题 🚢 在容器环境中,JVM内存配置

gitblog_00938的博客 1034
上一篇: Java Executor Service 使用要注意的一点
下一篇: Spring Spel 与 Placeholder
开心的D哥
博客等级 码龄22年 63粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值