Eclipse中你一定见过-vmargs -Xmx ...

博客主要围绕Eclipse内存问题展开,指出可通过 -vmargs -Xmx 调整JVM堆大小,避免内存不足。同时介绍了服务管理器实用程序 imqsvcadmin,包括其命令语法、子命令、选项,还说明了删除、重新配置代理服务,使用替代Java运行时及查询代理服务的方法。

吃内存,这是我对Eclipse的印象,因为我512M的机子总出现内存不足,请用-vmargs -Xmx 调整的提示。然后,我只能关闭Eclipse,不然它就消极怠工。平时,我的大脑对这类提示信息采取的是习惯性过滤,可是今天我忍无可忍了 ,我要看看到底怎么搞,写代码的日子才能好过些。
这是我在网上查到的资源:

Java 虚拟机调整
默认情况下,代理使用大小为 192MB 的 JVM 堆。通常,这对于较大的消息负荷来说太小,应该增大。

当代理快要耗尽 Java 对象使用的 JVM 堆空间时,它将使用各种技术(如流控制和消息交换)来释放内存。在极端情况下,代理甚至关闭客户机连接以释放内存并减少消息内流。所以最好将最大 JVM 堆空间设置得足够大,以避免这种情况。

但是,与系统的物理内存相比,如果最大 Java 堆空间设置过大,代理将继续增大 Java 堆空间,直至整个系统耗尽内存。这会导致性能的降低、不可预计的代理崩溃和/或影响系统中运行的其他应用程序和服务的行为。通常,需要有足够的物理内存以便操作系统和其他应用程序在计算机上运行。

总的说来,好的方法是:估算正常和峰值系统内存容量,并配置 Java 堆大小,使其足以提供良好性能,但同时不应过大,以免引起系统内存问题。

要更改代理的最小和最大堆大小,请在启动代理时使用 -vmargs 命令行选项。例如:

/usr/bin/imqbrokerd -vmargs "-Xms256m -Xmx1024m"

此命令会将启动 Java 堆大小设置为 256MB,将最大 Java 堆大小设置为 1GB。

在 Solaris 上,如果通过 /etc/rc(即 /etc/init.d/imq)启动代理,请在 /etc/imq/imqbrokerd.conf 文件中指定代理的命令行参数。有关详细信息,请参见该文件中的注释。
在 Windows 上,如果将代理作为 Window 服务启动,请使用 imqsvcadmin install 命令的 -vmargs 选项指定 JVM 参数。在任何情况下,请通过检查代理的日志文件或通过使用 imqcmd metrics bkr -m cxn 命令验证设置。


服务管理器实用程序 (imqsvcadmin)

可以使用服务管理器实用程序 (imqsvcadmin) 安装、查询和删除作为 Windows 服务运行的代理。本节介绍了 imqsvcadmin 命令的基本语法,提供了一个子命令列表,概述了 imqsvcadmin 命令选项,并说明了如何使用这些命令执行特定的任务。

imqsvcadmin 命令语法

imqsvcadmin 命令的一般语法如下:

imqsvcadmin subcommand [options]

imqsvcadmin -h

请注意,如果指定 -v、-h 或 -H 选项,将不会执行命令行中指定的其他子命令。例如,输入以下命令将显示帮助信息,而不是执行 query 子命令。

imqsvcadmin query -h

imqsvcadmin 子命令

表 D-1 列出了 Message Queue 服务管理器实用程序 (imqsvcadmin) 包含的子命令:

表 D-1 imqsvcadmin 子命令

子命令

说明

install

安装服务并特定启动选项。

query

显示 imqsvcadmin 命令的启动选项。启动选项包括服务的启动方式(手动或自动)、服务的位置、Java 运行时的位置以及启动时传递给代理的参数值。

remove

删除服务。

imqsvcadmin 选项概述

表 D-2 列出了 imqsvcadmin 命令的选项。有关如何使用这些选项的论述,请参见基于任务的以下各节。

表 D-2 imqsvcadmin 选项

选项

说明

-h

显示使用帮助。不在命令行执行其他命令。

-javahome path

指定要使用的替代 Java 2 兼容运行时(默认使用系统上的运行时或 Message Queue 附带的运行时)的路径。

示例:imqsvcadmin -install -javahome d:/jdk1.4

-jrehome path

指定替代 Java 2 兼容 JRE 的路径。

示例:imqsvcadmin -install -jrehome d:/jre/1.4

-vmargs arg [[arg]]

指定传递给正在运行代理服务的 Java VM 的其他参数。(也可以在 Windows 服务控制面板的启动参数字段中指定这些参数。)

示例:-vmargs -Xms16m -Xmx128m

-args arg [[arg]]

指定传递给代理服务的其他命令行参数。有关 imqbrokerd 选项的说明,请参见“启动代理”

(也可以在 Windows 服务控制面板的启动参数字段中指定这些参数。)例如,

imqsvcadmin -install -args -passfile d:/imqpassfile

使用 -javahome-vmargs-args 选项指定的信息存储在 Window 注册表项 JavaHomeJVMArgsServiceArgs 下,其路径位于

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/iMQ_Broker/Parameters

删除代理服务

删除代理服务之前,应使用 imqcmd shutdown bkr 命令关闭代理。然后使用 imqsvcadmin remove 命令删除服务并重新启动计算机。

重新配置代理服务

要重新配置服务,首先要删除服务,然后重新安装并使用 -args 参数指定不同的启动选项。

使用替代 Java 运行时

可以使用 -javahome-jrehome 选项指定替代 Java 运行时的位置。(也可以在 Windows 服务控制面板的启动参数字段中指定这些选项。)请注意,启动参数字段将反斜杠 (/) 作为转义符进行处理,因此如果要使用它作为路径分隔符,必须键入两次,例如 -javahome d://jdk1.3

查询代理服务

要确定代理服务的启动选项,请使用 imqsvcadmin 命令的 -q 选项。

imqsvcadmin -query

Service iMQ_Broker is installed.

Display Name: iMQ_Broker

Start Type: Manual

Binary location: c:/Program Files/Sun Microsystems/Message Queue 3.5/bin/imqbrokersvc

JavaHome: c:/j2sdk1.4.0

Broker Args: -passfile d:/imqpassfile


嗯,看了之后知道该怎么搞定了,但愿改了以后能告别那个该死的提示。
这是我的更改:
F:/eclipse/eclipse.exe -vmargs -Xmx256m

参考: http://docs.sun.com/source/817-7211/index.html
这段配置是 **Eclipse IDE 或基于 Eclipse RCP(Rich Client Platform)的应用程序** 的启动参数,主要用于指定 Java 虚拟机(JVM)的启动行为、内存分配、垃圾回收策略等。以下是逐项解析和关键说明: --- ### **1. 核心配置项解析** #### **(1) 启动器与平台依赖** ```ini -startup plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200 ``` - **作用**: 指定 Eclipse 启动器(`equinox.launcher`)的 JAR 文件和本地库(Native Library)。 - `-startup`:启动器的主 JAR 文件路径。 - `--launcher.library`:平台相关的本地库(如 Windows 64 位的 DLL),用于处理 GUI 和系统交互。 - **关键点**: - 路径 `plugins/` 是 Eclipse 默认的插件目录,包含所有核心和第三方插件。 - 版本号(如 `1.5.0.v20180512-1130`)用于兼容性管理,升级 Eclipse 时需保持匹配。 #### **(2) JVM 路径** ```ini -vm ./jre/bin/javaw.exe ``` - **作用**: 显式指定应用程序使用的 Java 运行时环境(JRE)路径。 - `./jre/bin/javaw.exe`:使用当前目录下 `jre` 文件夹中的 `javaw.exe`(无控制台窗口的 Java 启动器)。 - **为什么需要显式指定**? - 避免依赖系统环境变量 `PATH`,确保使用特定版本的 Java(如与 Eclipse 兼容的版本)。 - 常见问题:若未指定,Eclipse 可能因找不到合适的 JVM 而启动失败。 #### **(3) 内存配置** ```ini -vmargs -Xms512m -Xmx3222m -Xss1536k -XX:MaxPermSize=256m ``` - **作用**: 通过 `-vmargs` 传递参数给 JVM,控制堆内存、栈内存和永久代(PermGen)大小。 - `-Xms512m`:初始堆内存 512 MB。 - `-Xmx3222m`:最大堆内存 3222 MB(约 3.15 GB)。 - `-Xss1536k`:每个线程的栈大小 1536 KB(1.5 MB)。 - `-XX:MaxPermSize=256m`:永久代最大大小 256 MB(Java 8 之前用于存储类元数据)。 - **注意事项**: - Java 8 及以后版本已移除永久代(PermGen),改用元空间(Metaspace),此时 `MaxPermSize` 无效。 - 32 位系统下,`-Xmx` 通常不能超过 1.5 GB(受地址空间限制)。 #### **(4) 垃圾回收(GC)策略** ```ini -XX:+UseParallelGC ``` - **作用**: 启用并行垃圾回收器(Parallel GC),适用于多核 CPU,通过并行线程加速垃圾回收。 - **其他常见 GC 选项**: - `-XX:+UseG1GC`:启用 G1 垃圾回收器(Java 7+ 默认)。 - `-XX:+UseConcMarkSweepGC`:启用 CMS 垃圾回收器(Java 8 之前的高并发场景)。 #### **(5) 堆空闲比率** ```ini -XX:MinHeapFreeRatio=50 -XX:MaxHeapFreeRatio=60 ``` - **作用**: 控制 JVM 堆内存的动态调整行为: - `MinHeapFreeRatio=50`:当堆空闲内存低于 50% 时,JVM 会扩容堆。 - `MaxHeapFreeRatio=60`:当堆空闲内存高于 60% 时,JVM 会缩容堆。 - **目的**: 平衡内存使用和性能,避免频繁扩容/缩容导致的开销。 --- ### **2. 典型应用场景** #### **(1) Eclipse IDE 启动** - **配置目的**: 优化 Eclipse 的内存使用和响应速度,避免因内存不足导致卡顿或崩溃。 - **推荐配置(64 位系统)**: ```ini -vmargs -Xms1024m -Xmx4096m -Xss2m -XX:+UseG1GC ``` - 初始堆 1 GB,最大堆 4 GB,适应大型项目开发。 - 使用 G1 GC 减少 GC 停顿时间。 #### **(2) 基于 Eclipse RCP 的应用** - **配置目的**: 定制化内存和 GC 策略,满足特定业务场景(如实时数据处理、高并发)。 - **示例配置**: ```ini -vmargs -Xms512m -Xmx2048m -Xss1m -XX:+UseParallelGC -XX:MinHeapFreeRatio=40 -XX:MaxHeapFreeRatio=50 ``` - 较低的初始堆和栈大小,适应资源受限环境。 - 调整堆空闲比率以减少内存波动。 --- ### **3. 常见问题与解决** #### **问题1:Eclipse 启动报错“Could not create the Java virtual machine”** - **原因**: - `-Xmx` 超过系统可用内存或 32 位 JVM 限制。 - `-Xss` 过大导致线程数受限(如 `-Xss2m` 时,最多支持约 2000 线程)。 - **解决**: - 降低 `-Xmx` 值(如 32 位系统设为 1024m)。 - 减小 `-Xss`(如 512k 或 1m)。 #### **问题2:Java 8 及以上版本报错“Unrecognized VM option 'MaxPermSize'”** - **原因**: Java 8 移除了永久代(PermGen),改用元空间(Metaspace),`MaxPermSize` 参数失效。 - **解决**: - 删除 `-XX:MaxPermSize=256m`。 - 如需限制元空间大小,使用 `-XX:MaxMetaspaceSize=256m`。 #### **问题3:Eclipse 频繁卡顿或 GC 停顿时间过长** - **原因**: - 堆内存不足导致频繁 Full GC。 - GC 策略不适合当前负载(如 Parallel GC 在低延迟场景下表现不佳)。 - **解决**: - 增大 `-Xmx`(如 4096m)。 - 切换到 G1 GC:`-XX:+UseG1GC`。 - 调整 GC 日志参数以分析问题: ```ini -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log ``` --- ### **4. 最佳实践建议** 1. **根据系统资源调整内存**: - 64 位系统:`-Xms1024m -Xmx4096m`。 - 32 位系统:`-Xms256m -Xmx1024m`。 2. **优先使用 G1 GC**: - Java 7u4+ 和 Java 8+ 默认启用 G1,适合大多数场景。 3. **监控内存使用**: - 使用 VisualVM 或 Eclipse Memory Analyzer(MAT)分析堆转储(Heap Dump)。 4. **版本兼容性**: - 确保 `equinox.launcher` 和 JVM 版本匹配(如 Java 11 需 Eclipse 2019-03 或更高版本)。 --- ### **5. 总结** - **核心配置**: - `-vm` 指定 JVM 路径,避免环境依赖问题。 - `-vmargs` 调整内存和 GC 策略,优化性能。 - **关键参数**: - `-Xms`/`-Xmx`:控制堆内存范围。 - `-XX:+UseG1GC`:推荐垃圾回收器。 - `-XX:MaxMetaspaceSize`:Java 8+ 的类元数据空间限制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值