一:Java堆
java堆是存储java对象的内存区域,JVM在启动时向操作系统申请堆的大小,也可以通过-Xmx 和-Xms两个选项来控制堆的大小,但是使用这两个选项后堆的大小就会固定,不能在向操作系统重新申请内存了
二:线程
线程是JVM运行实际程序的实体,但是线程需要内存空间来存储一些必要的数据。每当一个线程被创建时,JVM会为他创建一个堆栈,通常在256KB-756KB之间。
如果线程的数量过多,一:线程占用的内存用量可能会很大,二:CPU的效率可能会很低,还会导致较差的性能和更高的内存占用率。
三:类和类加载器
类和类加载器本身需要存储空间,他们存储在java堆中的永久代(PermGen);
JVM在加载类时时按需加载的。
四:NIO
NIO是一种基于通道和缓冲区的方式来执行IO操作。NIO并不使用Java堆中的内存,而是直接申请操作系统的内存,这种方式避免了在java堆和本机堆之间复制数据,从而提高了java的IO操作效率。