java - 使用 JVM 内存默认值运行 Java Web 应用程序

标签 java memory jvm

我正在使用我的 IDE (IntelliJ) 运行我的 java web 应用程序并执行大量批量操作,该操作现在已经运行了大约 5 个小时左右。它包括大量的数据库插入、大量的对象创建,我猜它也是 CPU 密集型的,而且它对网络的负担一点也不重。

我的任务管理器(Windows)中的当前外观给了我这些数字:

  • CPU:35%
  • 内存:49%
  • IO:1%
  • 网络:0%
  • GPU:5%

进程的使用,是...

...按 CPU 使用率排序,如下所示:

  1. “PostreSQL 服务器”
  2. “IntelliJ IDEA(9)”
  3. “谷歌浏览器 (16)”

...按内存消耗排序:

  1. “IntelliJ IDEA(9)”
  2. “谷歌浏览器(16)”
  3. “OpenJDK 平台二进制文件”

我的主观感觉肯定是,我的电脑工作很辛苦,我听到风扇不停地转,而且在窗口之间切换时我看到滞后。

但是我想知道,为什么我的任务管理器没有显示我的计算机正在充分利用其中一项资源?

我想这意味着我的应用程序已经使用了最大可用内存(受 JVM 堆大小限制)?我没有明确指定这一点,并运行

java -XX:+PrintFlagsFinal -version | findstr HeapSize

为我生成这些默认值:

uintx ErgoHeapSizeLimit                         = 0                                   {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
    uintx InitialHeapSize                          := 268435456                           {product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx MaxHeapSize                              := 4271898624                          {product}
openjdk version "1.8.0_202"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_202-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.202-b08, mixed mode)

我的机器上有 16 GB 物理 RAM,您是否建议我按照此处所述为 xmsxmx 设置显式值? How can I increase the JVM memory?

最佳答案

默认情况下,JVM 使用 1/4 的可用物理内存作为 MaxHeapSize。如果您需要更多,则可以通过 -Xmx 指定。 这实际上取决于您的应用程序及其需求。

请注意,IDEA 本身可能会消耗大量内存,因为它也是 Java 应用程序。 如果您担心性能,您应该首先分析您的应用程序(从 VisualVM 之类的东西开始),然后根据需要进行调整。

关于java - 使用 JVM 内存默认值运行 Java Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57696478/

相关文章:

Java 正则表达式查找/替换

java - 向 JButton 添加第二个边框

java - java中如何将String类型转换为Class类型

c++ - 在 Linux 中监控程序的内存使用情况

C - 队列未正确存储值

android - Android开发中的自动化测试

java - 静态变量如何在类加载时获取对象的值?

java - 如何在显示 android 后更改自定义对话框中 View 的可见性

Java:将数组设置为空以释放内存

pointers - Golang - 带指针的 map 的空间效率