JVM可用最大内存

在命令行下用 java -XmxXXXXM -version 命令来进行测试,然后逐渐的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息。

试了一下,在XP pro环境下,最大可以使用14XXM的内存。

转一段论坛的帖子:

"我建议你做Tomcat集群。当然前提是你的程序支持Cluster。每个JVM都可以用1G左右。这是一种充分利用内存、增加系统负载能力的办法。
IBM的WAS部署时可以选择分布式部署,也就是在一台应用服务器上,装两个WAS,然后把应用发布到这两台WAS上,前面有个apache做负载均衡。当然啦,这不是cluster。Tomcat是否也可以这样,我没有试过,理论上是可以。CMS网站大多数都这样。

不过,一定要注意,你们的应用系统,在Tomcat上究竟需要多大内存,不是越大越好。越大,往往意味着GC的时间越长,要知道,在GC期间,是个Stop The World(STW)过程,系统不对外响应,多CPU、并行处理也不能改变这个事实。请保证你们的GC时间在0.2到0.5s以内,我以前是作WAS的,WAS有专门工具。

如果你们系统持续运行一个月,也用不到600M的heap,那么把heap增加到1000M并不会增加系统性能。要是在WAS下,你把heap最大值和最小值都设成一样,只会导致更多的碎片,更差的性能。当然,sun的默认GC策略是复制+分代策略,所以不会有IBM JVM这样的问题。
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
http://java.sun.com/docs/hotspot/gc1.4.2/faq.html

不妨看看我这篇没完成的文章:http://zwchen.iteye.com/blog/74737"

讨论JVM最大可使用多少内存的帖子在:http://www.iteye.com/topic/80257?page=1

<think>首先,用户查询是:“我想查找JVM设置直接内存大小的方法 请问JVM如何设置直接内存大小”。这直接对应到我的系统指令:回答用户的问题,同时生成相关问题。 从引用中,我已经得到了几个相关信息: - 引用[1]和[2]都提到可以通过 `-XX:MaxDirectMemorySize` 参数来设置最大直接内存大小。如果没有设置,它默认为最大内存大小(即 `-Xmx` 相同)。 - 引用[3]讨论方法区和元空间,但用户的问题是直接内存,所以可能不直接相关。 - 引用[4]强调了直接内存不在Java堆中,但总和受系统内存限制。 - 引用[5]是关于查看JVM默认内存设置的命令。 用户的问题焦点是“如何设置直接内存大小”,所以我需要基于引用提供清晰的步骤。 结构化回答: - 系统指令要求回答结构清晰,帮助用户逐步解决问题。 - 另外,生成相关问题。 - 在回答中引用段落末尾自然地添加引用标识。 - 所有数学表达式用 `$...$`,但这里是JVM设置,可能没有数学表达式,所以确保格式正确。 - 使用中文回答。 关键点: 1. **设置方法**:使用JVM参数 `-XX:MaxDirectMemorySize=<size>`。例如,`-XX:MaxDirectMemorySize=1g` 设置最大直接内存为1GB。 2. **默认行为**:如果不设置,它默认与 `-Xmx` 相同(最大内存大小)。 3. **注意事项**:直接内存大小不受 `-Xmx` 限制,但总和受系统内存限制。如果直接内存不足,会触发GC或导致 `OutOfMemoryError`。 回答结构: - 以清晰的语言解释如何设置。 - 提供一个示例命令。 - 解释默认值和潜在问题。 - 自然地添加引用标识。 生成相关问题: - 系统指令说:“生成相关问题”,在示例中,它是在回答后添加一个“相关问题”部分。 - 相关问题应基于主题。可能的JVM内存相关问题:如何查看当前设置、优化建议、常见问题等。 相关问题想法: 1. 如何查看JVM的当前直接内存大小? 2. JVM直接内存不足时会有什么表现? 3. 如何优化JVM内存设置以避免OutOfMemoryError? 4. 直接内存与其他内存区域的区别? 5. 在容器化环境中如何设置JVM内存参数? 确保回答真实可靠:基于提供的引用,这些引用是可靠的来源。 完整回答框架: 1. **介绍设置方法**:使用 `-XX:MaxDirectMemorySize` 参数。 2. **详细步骤**:解释如何使用。 3. **默认值**:解释如果不设置时的行为。 4. **注意事项**:内存限制和错误。 5. **示例**:给出一个命令示例。 6. **引用标识**:在相关句子末尾添加 [^1], [^2], 等。 7. **相关问题**:在最后部分添加相关问题。 示例命令:基于引用,如 `java -XX:MaxDirectMemorySize=512m -jar yourapp.jar` 引用标识放置: - 当提及设置参数时引用 [^1] 和 [^2]。 - 当提及默认值时引用 [^1] 和 [^2]。 - 当提及内存限制时引用 [^4]。 最终回答: - 开头:直接回答如何设置。 - 主体:步骤和解释。 - 结尾:生成相关问题。 </think>### JVM设置直接内存大小的方法 要设置JVM的直接内存大小,主要通过JVM启动参数 `-XX:MaxDirectMemorySize` 来实现。直接内存JVM堆外内存的一部分,常用于NIO(New I/O)操作,如文件映射和网络数据传输。设置不当可能导致直接内存耗尽并引发 `OutOfMemoryError: Direct buffer memory` 错误。下面我将逐步解释设置方法、注意事项和示例。 #### 步骤 1: 使用 `-XX:MaxDirectMemorySize` 参数 在启动JVM时,通过命令行或配置文件添加参数 `-XX:MaxDirectMemorySize=<size>`。其中 `<size>` 指定最大直接内存大小,支持单位如 `m`(兆字节)、`g`(千兆字节)等。如果没有显式设置此参数,JVM默认会将最大直接内存大小设为与最大内存大小(即 `-Xmx` 参数值)相同[^1][^2]。 例如: - 设置最大直接内存为512MB:`-XX:MaxDirectMemorySize=512m` - 设置最大直接内存为2GB:`-XX:MaxDirectMemorySize=2g` 在应用程序启动脚本中添加此参数: ```bash java -XX:MaxDirectMemorySize=512m -Xmx1g -jar your-application.jar ``` 在此示例中: - `-Xmx1g` 设置最大内存为1GB。 - `-XX:MaxDirectMemorySize=512m` 单独设置最大直接内存为512MB。 如果不指定 `-XX:MaxDirectMemorySize`,默认直接内存大小与 `-Xmx1g` 相同(即1GB)[^1]。 #### 步骤 2: 理解默认值和内存限制 - **默认行为**:如果启动时未设置 `-XX:MaxDirectMemorySize`,JVM会使用 `-Xmx` 的值作为最大直接内存上限。例如,最大内存设置为 `-Xmx1g`,则默认直接内存也为1GB[^1][^2]。 - **内存总和限制**:直接内存不属于Java堆,因此不受 `-Xmx` 约束,但JVM占用的总内存(堆内存 + 直接内存 + 其他区域)不能超过操作系统可用的物理内存或容器限制。如果直接内存达到最大值,JVM会触发垃圾回收(GC)尝试回收;如果回收失败,则抛出 `OutOfMemoryError: Direct buffer memory`[^4]。 - **监控影响**:在高I/O应用(如数据库或网络服务)中,合理设置直接内存可避免性能瓶颈。建议根据应用需求调整,例如视频处理应用可设置更大的值。 #### 注意事项 1. **性能优化**:直接内存分配速度快于堆内存,但过量设置可能导致系统内存竞争。监控工具如 `jcmd` 或 `VisualVM` 可帮助跟踪直接内存使用情况。 2. **容器环境**:在Docker或Kubernetes中运行时,确保JVM参数与容器内存限制匹配。例如,分配的总内存应小于容器的 `memory limit`。 3. **错误处理**:如果遇到 `Direct buffer memory` 错误,检查 `-XX:MaxDirectMemorySize` 设置是否过小,或优化代码以减少直接内存分配(如复用ByteBuffer)[^2][^4]。 通过以上步骤,您可以根据应用需求灵活配置JVM直接内存大小。如果需要验证当前设置,可以使用命令 `java -XX:+PrintFlagsFinal -version | grep MaxDirectMemorySize` 查看默认值[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值