Java 在运行时配置内存

Java 在运行时配置内存,java,Java,我感兴趣的是,有没有一种方法可以动态地增加或减少Java所占用的内存?我知道这通常是在应用程序启动时完成的,但在生产时看到这一点会很酷。JVM已经做到了。它根据使用情况调整堆大小,并可以将内存返回操作系统(尽管并非总是如此) 你不能改变的是最大值。您无法更改它的原因是,它在启动时将此虚拟内存保留为单个连续块,这意味着它无法收缩或增长它 我建议将最大值设置为一个较高的值,您希望JVm失败,而不是分配更多内存。在这种情况下,调整此IMHO没有意义 顺便说一句,我不建议设置最小大小,除非您非常了解工作

我感兴趣的是,有没有一种方法可以动态地增加或减少Java所占用的内存?我知道这通常是在应用程序启动时完成的,但在生产时看到这一点会很酷。

JVM已经做到了。它根据使用情况调整堆大小,并可以将内存返回操作系统(尽管并非总是如此)

你不能改变的是最大值。您无法更改它的原因是,它在启动时将此虚拟内存保留为单个连续块,这意味着它无法收缩或增长它

我建议将最大值设置为一个较高的值,您希望JVm失败,而不是分配更多内存。在这种情况下,调整此IMHO没有意义


顺便说一句,我不建议设置最小大小,除非您非常了解工作负载和应用程序的使用情况(在将来),最小大小通常是为基准、已知负载和应用程序版本设置的,但对于负载和代码随时间变化的应用程序来说,这并不是一个好主意。

JVM已经做到了这一点。它根据使用情况调整堆大小,并可以将内存返回操作系统(尽管并非总是如此)

你不能改变的是最大值。您无法更改它的原因是,它在启动时将此虚拟内存保留为单个连续块,这意味着它无法收缩或增长它

我建议将最大值设置为一个较高的值,您希望JVm失败,而不是分配更多内存。在这种情况下,调整此IMHO没有意义


顺便说一句,我不建议设置最小大小,除非您非常了解工作负载和应用程序的使用情况(在将来),最小大小通常是为基准、已知负载和应用程序版本设置的,但是对于负载和代码随时间变化的应用程序来说,这不是一个好主意。

我认为这在很大程度上取决于您使用的JVM。对于Oracle的参考实现(OpenJDK/HotSpot),我认为这是不可能的,初始值是固定的


但是还有其他JVM实现,例如,我知道IBM有自己的JVM,在这方面可能表现不同。我建议仔细查看JVM文档。

我认为这在很大程度上取决于您使用的JVM。对于Oracle的参考实现(OpenJDK/HotSpot),我认为这是不可能的,初始值是固定的


但是还有其他JVM实现,例如,我知道IBM有自己的JVM,在这方面可能表现不同。我建议仔细查看JVM文档。

看起来你不能,但有解决办法:看起来你不能,但有解决办法:当JVM运行时,我可以动态配置什么?最大网络连接数可能?最大连接数由操作系统决定。您希望动态配置什么?当达到此最大值时,您希望发生什么?您可以使用一些连接池库配置最大数量的数据库连接,并为线程池配置最大数量的线程?最大网络连接数可能?最大连接数由操作系统决定。您希望动态配置什么?当达到此最大值时,您希望发生什么?您可以使用一些连接池库配置最大数量的数据库连接,并为线程池配置最大数量的线程。