我正在使用我的 IDE (IntelliJ) 运行我的 java web 应用程序并执行大量批量操作,该操作现在已经运行了大约 5 个小时左右。它包括大量的数据库插入、大量的对象创建,我猜它也是 CPU 密集型的,而且它对网络的负担一点也不重。
我的任务管理器(Windows)中的当前外观给了我这些数字:
- CPU:35%
- 内存:49%
- IO:1%
- 网络:0%
- GPU:5%
进程的使用,是...
...按 CPU 使用率排序,如下所示:
- “PostreSQL 服务器”
- “IntelliJ IDEA(9)”
- “谷歌浏览器 (16)”
...按内存消耗排序:
- “IntelliJ IDEA(9)”
- “谷歌浏览器(16)”
- “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,您是否建议我按照此处所述为 xms
和 xmx
设置显式值? 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/