Java 使用单独的jvm在单个jvm中启动applet并不总是有效

Java 使用单独的jvm在单个jvm中启动applet并不总是有效,java,applet,Java,Applet,我有一个小程序,它占用了相当多的内存,所以我们希望用单独的_jvm=true启动它,这样每个实例都有自己的jvm(而不是共享的),这样重复调用时就不会耗尽内存。这在我们的开发箱上有效,但在客户的计算机上失败 有没有安全方面的原因 这是一个经过签名和信任的小程序,因为我们正在进行3d渲染。在1.6u10中引入了单独的jvm参数。如果您客户的JVM比该版本旧,则该参数将被自动忽略。我假定Sun Java 6 update 10安装在您客户的计算机上。如果没有,您可能会强制小程序执行。我不确定将抛出的

我有一个小程序,它占用了相当多的内存,所以我们希望用单独的_jvm=true启动它,这样每个实例都有自己的jvm(而不是共享的),这样重复调用时就不会耗尽内存。这在我们的开发箱上有效,但在客户的计算机上失败

有没有安全方面的原因


这是一个经过签名和信任的小程序,因为我们正在进行3d渲染。

在1.6u10中引入了
单独的jvm
参数。如果您客户的JVM比该版本旧,则该参数将被自动忽略。

我假定Sun Java 6 update 10安装在您客户的计算机上。如果没有,您可能会强制小程序执行。我不确定将抛出的错误,或者如果找不到所需版本的JVM,将显示的错误消息

除此之外,不能保证在APPLET标记中指定参数时会创建单独的JVM实例


唯一的保证是小程序将在与其他小程序分离的自己的JVM中运行。如果JVM已经可用,并且该JVM中没有加载小程序,则JVM可以在已初始化的JVM实例中加载小程序

对于Sun Java 6 u10发行说明,以下要点值得一读:

以下是来自的一组关于共享和创建新JVM实例的粗略指南:

  • 如果用于启动先前存在的JVM实例的命令行参数是请求参数的超集,则将使用先前存在的JVM实例
  • 如果为“默认”命令行参数集启动JVM实例(即,在Java控制面板中指定的、未指定Java_参数的参数集),则此JVM实例将永远不会用于启动任何小程序,即使该小程序有一个通过Java_参数指定的命令行参数
  • -Xmx是专门处理的:如果一个预先存在的JVM实例是通过java_参数启动的,例如-Xmx256m,而一个新的applet请求-Xmx128m,那么新的applet很可能会在预先存在的JVM实例中运行。换句话说,-Xmx规范与大于或等于的测试相匹配

因此,最好的办法是在applet标记中提供java_参数,这样就很有可能在单独的JVM中启动applet。

您的客户正在使用哪个版本的JRE?他们使用的是1.6.0_14-b08和1.6.0_15-b03。对,他们使用的是1.6u11或13,我不记得了。“唯一的保证是小程序将在自己的JVM中运行,与其他小程序分开。”这一保证被打破了。我们让它们同时启动了两个实例&它们都登录到同一个Java控制台(在我们的开发框中没有这样做,每个实例都有自己的控制台).您是使用applet标记还是object标记将applet嵌入页面?我想要的是相反的,我想为Java 7将separate_jvm设置为false,但在页面刷新后,会打开一个新控制台,因此会启动一个新jvm,不是吗?问题是,它会停止与调试器的连接,并促使我重新启动浏览器er允许我的IDE再次连接调试小程序…我被迫在java控制面板中使用默认的java参数,因为有允许调试的参数…这在java 6.10+中没有发生…为什么在java 7中会发生变化?混合开发java小程序和JS会更困难