代码之家  ›  专栏  ›  技术社区  ›  Jay Askren

如何让用户轻松地选择在JAVA Swing应用程序中分配多少内存?

  •  3
  • Jay Askren  · 技术社区  · 14 年前

    我们有一个处理大量数据的Swing应用程序。例如,我们目前处理的csv文件包含数百万行数据。出于性能和简单性的原因,我们只将所有数据保存在内存中。然而,不同的用户将拥有他们需要处理的不同数量的数据以及不同数量的RAM。创建安装程序时,当然需要指定堆大小。是否有任何简单的方法允许用户指定堆而不需要手动编辑配置或.bat文件?我想不是所有的用户都能接受。

    我看到过一个例子,一个应用程序指定了三个不同的快捷方式,每个快捷方式都指定了不同的内存量。这可能有效,但我想要一个更灵活的选择。然后用户可以选择一个最适合他们的。

    5 回复  |  直到 9 年前
        1
  •  6
  •   Alain O'Dea    14 年前

    我建议你吃点类似于intellij的东西。当发生OutOfMemoryException时,它将显示配置对话框。此对话框允许用户配置堆大小并将其存储到 idea.exe.vmoptions . 您需要将文件的内容分为Java/JavaActudio命令或一个Java程序引导程序并启动真正的程序。

    一个非常酷的变体是根据数据大小建议内存大小。用户真的无法知道你的程序需要多少内存,所以你在选择值时提供的任何指导都将极大地帮助他们。

    它对于支持您期望的解决方案非常重要,并且以避免数据损坏的方式处理内存不足异常!

        2
  •  1
  •   PeterMmm    14 年前

    我会写一个简短的startup.jar,从一个脚本开始,只有很少的固定内存设置。反过来,startup.jar将使用runtime.exec()和调整后的参数启动目标应用程序。

    您最终得到的是两个比一个JVM占用更多内存的JVM实例。但是,如果您的应用程序将花费大量的内存,那么第一个JVM并不重要。

        3
  •  1
  •   gpeche    14 年前

    主要想法是:

    • 通过类似这样的shell脚本启动主应用程序:
    @echo off
    setlocal
    REM This reads the JVM command line options from a user configuration file
    for /f %x in (%HOMEDRIVE%%HOMEPATH%\myapp.config) do set JVM_OPTIONS=%x
    REM Important: call javaw and not java
    javaw -jar myApp.jar %JVM_OPTIONS%
    endlocal
    
    • 在Swing应用程序中,有一个菜单选项 内存设置… . 当用户选择该选项时,分析用户的配置文件并填充设置对话框,以便用户可以更改其适用的任何内容。当用户单击 应用 好啊 ,根据用户选择的设置用命令行选项覆盖用户配置文件(在您的情况下, -Xmx ,并显示一条消息 重新启动应用程序以应用这些设置 .
        4
  •  1
  •   Dead Programmer    14 年前

    捕获OutOfExpExpType,使用Swing用户对话框来设置内存限制,将此值传递给使用运行时的线程。()()使用Java -CP-LIB的JAR VMOPTION重新启动应用程序,它将启动一个新的JVM,其内存大小指定给用户。

     Runtime.getRuntime().exec("java -cp
     -Xms2560m -Xmx2560m -XX:NewSize=32M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewG launch.jar");
    
        5
  •  0
  •   Nithesh Chandra    14 年前

    您没有提到如何创建安装程序。如果您还没有使用它,我建议您使用 NSIS . 文档很好,并且有一个Eclipse插件。您可以使用向导生成NSI文件,然后针对向导不可用的选项手动编辑该文件。

    对于您当前的要求,只需为选项向安装程序添加一个页面,并根据所选选项,将正确的系统属性文件复制到用户设置文件夹中,您可以使用该文件夹启动程序。我不确定是否可行,但我认为一旦安装了程序,用户就可以重新运行安装程序并选择其他选项。