java除了堆和元空间占用内存外,还有哪些区域占用内存?

java除了堆和元空间占用内存外,还有哪些区域占用内存?
1. Direct Memory:能够经过-XX:MaxDirectMemorySize调整大小,内存不足时抛出OutMemoryError或OutOfMemory:Direct buffer memory
 
 2. 线程堆栈:可经过-Xss调整大小,内存不足时抛出StackOverflowError(纵向没法分配,即没法分配新的栈帧)或OutOfMemoryError:uable to create new native thread(横向没法分配,即没法创建新的线程)

 3. Scoket缓存区:每一个Socket链接都有Receive和Send两个缓存区,分别占大约37KB和25KB的内存,若是链接多的话,这块内存的占用也比较多,若是没法分配,则可能会抛出IOException:Too    many open file异常。

 4. JNI代码:若是代码中使用JNI调用本地库,那本地库使用的内存也不在堆中。

 5. 虚拟机和GC:虚拟机和GC的代码执行也要消耗必定的内存。
相关文章
相关标签/搜索