1.JAVA堆
JAVA堆是用于存储Java对象的内存区域,堆的大小在JVM启动的时候就一次向操作系统申请完成,通过-Xmx 和- Xms 来控制大小,Xmx在表示堆的最大大小,Xms表示初始大小。一旦分配完成,堆的大小就要固定,不能再内存不够的时候再向操作系统申请,同时当内存空闲时也不能将多余的空间交还给操作系统。
2.线程
JVM的运行实体是线程,当然线程需要内存空间来存储一些必要数据。每个线程创建时JVM都会为他创建一个堆栈。
3.类和类加载器
JAVA的类和类加载器被存放在堆中,所处的区域被称为永久代(PermGen)。三种类加载器:
(1)BootStrap Classloader
(2)ExtClassLoader
(3)AppClassLoader
任何系统类,或通过应用程序加载器加载的任何应用类都不能在运行时释放。
4.NIO
NIO使用java.nio.ByteBuffer.allocateDirect()分配的内存是本机内存,而不是Java堆上的内存,这也说明每次分配内存时都会调用操作系统的os::malloc()函数。因为不需要讲数据复制到java内存中,所以速度比在java堆上切换快了很多。
5.JNI