详见该链接http://blog.csdn.net/learner198461/article/details/68925841



jvm各种内存溢出是否产生dump文件,其中,堆内存溢出,永久代溢出会产生dump文件。而直接内存(堆外内存)溢出,栈内存溢出没有dump文件。

详见链接https://blog.csdn.net/stevendbaguo/article/details/51366181


堆外内存回收机制:堆外内存并不能像新生代、老年代那样,发现空间不足了就通知收集器进行垃圾回收,它只能等老年代满了后Full GC,然后顺便地帮它清理掉内存的废弃对象。

线程堆栈:可通过-Xss调整大小,内存不足时抛出StackOverflowError(纵向无法分配,即无法分配新的栈帧)或者OOM:Unable to create new native thread(横向无法分配,即无法建立新的线程)。

Socket缓冲区:每个Socket连接都有Receieve和Send两个缓冲区,连接多的话,这块内存占用也会很大。如果无法分配,则可能会抛出:Too many open files.

jps jstat jmap jhat jstack jinfo命令介绍详见链接https://blog.csdn.net/xybelieve1990/article/details/53516437