拥有如此简单的应用程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("Enter a number: ");
int n = reader.nextInt();
reader.close();
}
}
我使用不同的Xmx
参数运行它(请记住,JConsole已注入到进程中)
JConsole 向我显示了该应用程序的奇怪内存使用情况
如果使用-Xmx8M运行
如果使用-Xmx16M运行
并带有-Xmx32M
尽管使用外部软件来测量内存消耗可能会对这些值产生一定的影响,但Java似乎仍然会吃掉您让它吃掉的所有东西,即使不是必需的。这是我最讨厌的Java的一部分,但是试图理解。
我的程序不需要但由于更改Xmx参数允许它而被JVM占用的内存会发生什么情况? 我可以使用与Xmx参数不同的方法来影响“丢失”的内存量吗?
答案 0 :(得分:1)
即使不需要,Java也会吃掉您让它吃的所有东西。
Java不会主动清理内存。如果给它内存,它将期望使用它来减少CPU消耗。
我可以使用与Xmx参数不同的方法来影响“丢失”的内存量吗?
您可以减小最小尺寸,可以控制最小尺寸的增长速度。实际上,有超过500个参数可用于控制GC,但是通常建议您设置尽可能少的参数,除非您真的知道自己在做什么,以避免碰到如果不理会它们便不会发生的问题。
要记住的关键一件事是:时间就是金钱,而记忆力就是金钱。在某些时候,浪费一点内存是不值得的。
基于开发人员的平均工资和PC内存的平均价格(您组织的成本会有所不同)
1 day - 16 GB
1 hour - 2 GB
5 minutes - 160 MB
1 minute - 32 MB
如果您花费超过一分钟的时间来保存少于32 MB的内存,那可能是不值得的。
这是我最讨厌的Java的一部分,
我讨厌滥用单位,但实际上我应该学会克服它
m - milli
M - Mega
b - bits
B - Bytes
1 MB = 8 Mb = 1000000000 mB = 8000000000 mb