Rob*_*b N 6 java memory jvm shared-libraries
我想在我的Web服务器上运行多个Java进程,每个Web应用程序一个.我正在使用一个Web框架(Play),它有很多支持类和jar文件,Java进程使用大量内存.One Play过程显示大约225MB的"驻留私人"内存.(我在Mac OS X上使用Java 1.7.0_05进行测试.)特定于应用程序的代码可能只有几MB.我知道典型的Java Web应用程序是添加到一个服务器进程(Tomcat等)的jar,但似乎运行Play的标准方法是作为独立的应用程序/进程.如果这些是C程序,那么200MB中的大多数将是共享库,而不是在每个应用程序中重复.有没有办法在Java中实现这一点?我看到一些关于类数据共享的页面,但这似乎只适用于核心运行时类.
目前,使用Oracle VM,这是不可能的.
但我同意,这将是一个很好的功能,特别是因为Java拥有它需要自动完成的所有信息.
在我的帽子中,我认为JIT是其无法工作的唯一原因:JIT将运行时行为考虑在内.因此,如果应用程序A使用与应用程序B不同的模式的某些代码,则会导致在运行时生成不同的汇编程序代码.
但是,通常的"模式"是"这个代码的使用频率".因此,如果应用程序A经常调用某种方法而B没有,则它们仍然可以共享代码,因为A已经为优化/编译它付出了代价.
您可以尝试将多个应用程序作为WAR文件部署到单个VM中.但根据我的经验,这通常会导致代码无法正确清理线程本地或关闭钩子的问题.
| 归档时间: |
|
| 查看次数: |
5949 次 |
| 最近记录: |