我有一个在Linux下运行的Java应用程序的问题。
当我使用默认的最大堆大小(64 MB)启动应用程序时,我看到使用tops应用程序为应用程序分配了240 MB的虚拟内存。这就给计算机上的其他一些软件带来了一些问题,这些软件的资源相对有限。
保留的虚拟内存无论如何都不会被使用,据我所知,因为一旦达到堆限制就会抛出OutOfMemoryError
。我在windows下运行相同的应用程序,我看到虚拟内存大小和堆大小是相似的。
是否有任何方式,我可以配置在Linux下的Java进程使用的虚拟内存?
编辑1:问题不在于堆。问题是,如果我设置一个128 MB的堆,Linux仍然分配210 MB的虚拟内存,这是不需要的,永远。**
编辑2:使用ulimit -v
可以限制虚拟内存的数量。如果大小集低于204 MB,那么即使应用程序不需要204 MB,只需要64 MB,它也不会运行。所以我想了解为什么Java需要这么多虚拟内存。这种情况可以改变吗?
编辑3:有几个其他的应用程序运行在系统中,这是嵌入式的。系统确实有一个虚拟内存限制(来自评论,重要细节)。