从这篇博文起,不再是流水式的学习记录了,稍微改进下风格。
运行时获得当前JVM 设置大小
首先,-Xmx100000000指定最大的内存分配。
public static void main(String[] args) { Runtime run = Runtime.getRuntime(); long max = run.maxMemory(); long total = run.totalMemory(); long free = run.freeMemory(); System.out.println(max); System.out.println(total); System.out.println(free); }
结果:
97320960 16252928 15536696
看到基本是100M的样子。
-Xms 设置JVM 初始化最小值
97320960 96731136 95661464
我们可以看到初始值基本马上就分配了大概100M 的样子。
服务器端上建议-Xms 和-Xmx 设为同样的大小,这样就不用老是伸缩大小了。
GC 的分代模型
在JVM 的章节中我们介绍了GC 的分代回收的策略。
这里的某个JVM 实现划分为 young, old, permanet.
young 代
据说这一代的对象采用的复制收集算法。
old 代
young 代活过几轮就可以进入到old 代。
具体熬过几代可以进入到这里,是有参数可以设置的。
这里的对象采用标记清理算法。
permanet 代
这里的一般不GC, 里面是一些Class 信息。
Note:
因为没有遇到过实际的问题,希望将来能够有碰到类似的问题并尝试解决的机会。
-Xss
-Xmn