JVM内存组成

JVM内存组成:
1、程序计数器:是一块较小的内存空间,它的作用是当前线程所执行的字节码的行号指示器。
2、Java虚拟机栈:存放每个线程执行方法的局部变量区、操作数栈。
   本地方法栈:执行Native方法。Sun Hotspot虚拟机把本地方法栈与虚拟机栈合二为一。
3、Java堆
4、方法区(Perm代)
5、直接内存(Direct Memory),NIO使用Native函数库直接分配堆外内存。直接内存的分配不受Java堆大小的限制,在32位操作系统上,如果Xmx+Perm+虚拟机栈+直接内存>2G,导致OOM,但在windows下,一般java内存分配不能超过1.3G左右,否则Java进程启动失败。

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. Mao说道:

    直接内存不明白。
    是整个JVM能用的内存吗?不能超过2G的是什么原因?难道JVM进程还有寻址长度限制吗?

  2. Lin说道:

    直接内存是指NIO的ByteBuffer.allocateDirect分配新的直接字节缓冲区,你可看它的源码,调用到本地方法,它分配的内存不在Heap堆内存里,allocate方法才是申请堆内存。
    JVM内存的分配收操作系统限制,32位的操作系统最大寻址空间是4G,但一般操作系统本身也要占用一部分内存,所以一般JVM最大能申请的内存也就2G左右,但windows下比较特殊,一般申请1.4G左右就出错,可以用java -Xmx1500m -version试下

Copyright © 2012-2017 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部