在内存管理方面,Java相对于C和C++的区别在于Java具有内存动态分配以及垃圾收集技术,但平时我们很少去关注JVM的内存结构以及GC,在出现内存泄露或溢出方面的问题,排查工作将变得异常艰难。
// 虚拟机栈和本地方法栈的大小 = 线程允许最大内存 - 最大堆容量 - 最大方法区容量
// 在多线程时,给每个线程分配的栈越大,越容易出现异常
// 堆溢出
// -Xmx 堆最大值
// -Xms 堆最小值
// -XX:+HeapDumpOnOutOfMemoryError 设置虚拟机在异常时转储当前内存堆
// 可以使用Eclipse Memory Analyzer 对转储的堆进行分析