JVM内存区域主要分为线程私有区域(程序计数器、虚拟机栈、本地方法区)、线程共享区域(JAVA堆、方法区)、直接内存。
线程私有数据区域生命周期与线程相同,依赖用户线程的启动/结束,而创建/销毁(在HotspotVM内,每个线程都与操作系统的本地线程直接映射,因此这部分内存区域的存/否跟随本地线程的生/死对应)。
线程共享区域随虚拟机的启动/关闭而创建/销毁。
直接内存并不是JVM运行时数据区的一部分,但也会被频繁使用:在JDK1.4引入的NIO提供了基于Channel与Buffer的IO方式,它可以使用Native函数库直接分配堆外内存,然后使用DirectByteBuffer对象作为这块内存的引用进行操作,这样就避免了在Java堆和Native堆中来回复制数据,因此在一些场景中可以显著提高性能。
注意:本文归作者所有,未经作者允许,不得转载