【问题标题】:Determine optimal Java runtime parameters before launch?在启动前确定最佳 Java 运行时参数?
【发布时间】:2014-01-28 08:33:17
【问题描述】:

我们正在运行一个用于渲染和显示大量图像的 Java 应用程序。为了使这一切顺利进行,我们想分配相当数量的堆空间,并想检查计算机上是否有 64 位版本可用。我们希望在多台不同的计算机上运行该应用程序,因此通过反复试验手动检查可用内存和运行时版本非常麻烦。

有谁知道确定可以为堆空间保留的可用内存并确定可用 JRE 的方法吗?所以我们可以在执行 jar 时以某种方式将这些参数传递给 JRE?

我知道这需要某种批处理文件,就像在这个线程中讨论的那样: Setting Launch Parameters In Java Class

有没有人遇到过适用于 Windows 环境的运行示例?我对 Windows 批处理文件的了解充其量是有限的。

问候,马吕斯

【问题讨论】:

  • 我会考虑检查是否有足够的内存用于所需的堆空间,而不是检查可用内存和保留堆。区别很重要,因为以减少的堆空间启动您的应用会使您的应用容易受到 OutOfMemory 错误的影响
  • JRE 已经有一个相当好的默认值,并且会根据可用的物理内存来调整堆大小。在 Java 7 中,它是总 RAM 的四分之一,或最大 1 GB。
  • @MarkoTopolnik 是专门的服务器虚拟机;必须确保使用它。
  • @Gimby 我测试了这个:java -client -XX:+PrintCommandLineFlags -version,上面写着-XX:MaxHeapSize=2147483648。那是 2 GB,所以实际上我在上面的评论中错了:最多 2 GB(服务器和客户端)。
  • @MarkoTopolnik:很奇怪,因为我可以发誓你所说的至少在 Java 6 更新 17/18 及更高版本中是正确的;也许在 Java 7 中事情发生了变化,我们错过了。

标签: java batch-file memory heap-memory


【解决方案1】:

检查java是否为64位:

java -version 2>&1|find /i "64-Bit" && echo YEP!||echo NOPE!

获得空闲内存:

wmic os get freephysicalmemory

或:

systeminfo | find "Physical Memory"

编辑 获取空闲内存的通用快速方法:

mshta "javascript:close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(GetObject('winmgmts:').ExecQuery('Select * from Win32_PerfFormattedData_PerfOS_Memory').ItemIndex(0).AvailableBytes));"|more

将结果赋值给变量:

for  /f "usebackq" %%a in (`mshta ^"javascript^:close^(new ActiveXObject^(^'Scripting.FileSystemObject^'^).GetStandardStream^(1^).Write^(GetObject^(^'winmgmts:^'^).ExecQuery^(^'Select * from Win32_PerfFormattedData_PerfOS_Memory^'^).ItemIndex^(0^).AvailableBytes^)^);^"^|more`) do set free_mem=%%a

【讨论】:

  • 最后一个完成很慢,因为它会扫描所有的修补程序。
  • @MarkoTopolnik:是的,WMIC 在 Windows 的 Home/Basic/starter 版本中不可用。现在正在考虑使用 mshta+vbscript 来实现通用解决方案。
  • 嗨,这些方法会返回一个可以安全地分配给 JVM 的值吗?至于物理内存,我不介意该值(至少在 RAM 较少的系统上)是否包括可用内存(包括交换文件),而物理内存仅限于单独收费 RAM?
  • 我添加了一个代码,允许将空闲内存分配给变量。
  • 页面文件可以通过类似的方式获取。查看 wql 查询:activexperts.com/network-monitor/windowsmanagement/adminscripts/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
  • 2020-07-08
相关资源
最近更新 更多