0

我试图解决一个困扰我一段时间的问题。简而言之:应该在什么基础上为占用资源的应用程序分配最大堆空间,tit 太大是否有不利影响?

我有一个用于可视化大量医疗数据的应用程序,如果并排打开多个成像卷,它可能会占用多达几 GB 的内存。缓存要查看的数据对于流畅的工作流至关重要。该软件受 Windows 工作站支持,并由引导加载程序启动,该引导加载程序分配堆大小并启动​​主应用程序。主应用程序所需的实际内存与正在查看的数据成正比,并且无法由引导加载程序确定,因为它需要读取数据,最终会消耗太多时间。

因此,为了确保 JVM 在启动期间有足够的内存,我们根据当前的设计,根据工作站的最大物理内存设置了尽可能大的 xxx。但是,这有什么缺点吗?我已经读到(来自 2008 年的一篇文章),本机进程可能会占用过多的堆空间,这可能会导致运行时出现内存错误。在分配堆空间之前,我是否还应该嗅探空闲虚拟内存或分页文件大小?你会如何处理这种情况?

哦,这是我在这些论坛上的第一篇文章。很高兴认识大家,温柔点!:)

更新:

感谢所有的答案。我不确定我的话是否正确,但我的问题源于我对将运行该软件的硬件的了解为零,但仍然希望为该软件分配尽可能多的堆空间.

如果有足够数量的可用虚拟内存,我找到了一个分配 70% 的物理内存堆的解决方案 - 否则更少。

4

2 回答 2

0

最好不要将 JVM 最大内存设置为大于工作站内存的 60-70%,在某些情况下甚至更低,主要有两个原因。首先,由于 GC 机制,JVM 在物理机上的消耗可能比堆多 20% 或更多。其次,JVM 堆中特定数据实体的表示可能不是该实体在机器 RAM 中的唯一物理副本,因为操作系统在各种 IO 设备周围具有缓存和缓冲区等,它可以从中获取这些对象。

于 2016-09-11T02:59:38.877 回答
0

如果您有大型对象,您可以拥有大约 28 GB 的堆大小,而对性能影响很小。(大量小对象会影响 GC 暂停时间)

100 GB 的堆大小是可能的,但有缺点,主要是因为它们可能有很长的暂停时间。如果您使用 Azul Zing,它可以更优雅地处理更大的堆大小。

主要限制是内存的大小。如果您的堆超过该值,您的应用程序和您的计算机将运行得非常慢/无法使用。

使用地图软件(例如必须能够绘制整个世界)解决这些问题的标准方法是将图像分解为图块。这样,您只显示作为屏幕之一的图像(或屏幕上的部分)如果您需要能够放大和缩小,您可能需要以两到四级比例存储数据。使用这种方法,您可以在手机上查看整个世界的地图。

于 2016-09-09T11:04:02.650 回答