使用separate_jvm在各个JVM中启动applet并不总是有效
我有一个需要大量内存的applet,所以我们想用separate_jvm = true启动它,这样每个实例都可以获得自己的JVM(而不是共享的JVM),这样我们就不会在重复调用时耗尽内存。 这适用于我们的开发盒,但在客户的计算机上失败。
这有安全原因吗?
这是一个签名且受信任的applet,因为我们正在进行3D渲染。
我认为客户端的计算机上安装了Sun Java 6 update 10。 如果没有,您可能会强制applet 在版本至少为6u10的JVM中运行 。 我不确定将抛出的错误,或者如果找不到所需版本的JVM,则会显示错误消息。
除此之外,当在APPLET标记中指定separate_jvm参数时,无法保证将创建单独的JVM实例。
唯一的保证是applet将在与其他applet分离的自己的JVM中运行。 如果JVM已经可用且未在该JVM中加载applet,则JVM可以在已初始化的JVM实例中加载applet。
对于Sun Java 6 u10发行说明,以下重点值得一读:
以下是6u10发行说明中的一组粗略指南,用于共享和创建新的JVM实例:
- 如果用于启动预先存在的JVM实例的命令行参数是所请求参数的超集,则将使用预先存在的JVM实例。
- 如果为“默认”命令行参数集启动了JVM实例(即,在Java控制面板中指定的那些,没有指定java_arguments),那么这个JVM实例将永远不会用于启动任何一个甚至一个的applet通过java_arguments指定的命令行参数。
- -Xmx是专门处理的:如果一个预先存在的JVM实例是通过java_arguments启动了例如-Xmx256m,而一个新的applet请求-Xmx128m,那么新的applet很可能会在预先存在的JVM实例中运行。 换句话说,-Xmx规范与大于或等于的测试相匹配。
因此,最好的办法是在applet标记中提供java_arguments,这样在单独的JVM中启动applet的可能性非常高。
separate_jvm
参数是在1.6u10中引入的。 如果客户的JVM是旧版本的JVM,则会以静默方式忽略该参数。
- 签名的applet在从javascript调用时给出AccessControlException:访问被拒绝
- 通过JNLP的Java Applet:System.Properties没有“设置”
- 获取JSObject或JSContext来运行applet
- Java Applet:调用JavaScript – JSObject.getWindow(this)返回null
- 如何在Appletcanvas上制作彩绘对象?
- Java HTTP Post Applet服务器 – 内部生成的Image
- 关注mac osx上java7模式对话框的问题
- 在JButton上播放音频文件?
- 导出.jar时出现FileNotFoundException