区别在于内存分配的方式,allocate分配的内存在jvm管理范围内,directAllocate分配的内存则不是由jvm管理,可以理解成是类似 C++那种分配的内存,大家一定会说那由directAllocate分配的内存即然不由jvm管理,那么他是如何释放的,虽然 directAllocate分配的内存不由jvm管理但他所属的对像还是由jvm管理的(比如ByteBuffer这类型的对像),所以当对像消亡时就 是这段内存释放的时候,至于为什么java要提供二种内存分配方式,由于java的内存不是直接由操作系统管理,所以当网络来了数据后,要到java里, 首先是放到系统所能操作的内存然后再复制到java的内存中,如果这部分内存是由directAllocate分配的,就不用再复制一次了,这样就减少了 内存复制的次数,当然directAllocate并不是万能的,要知道,在jvm之外分配内存本身是非常耗时的操作,所以并不是一定由 directAllocate分配的内存就能提高性能,这要看具体的操作了,对于小数据量的传送就建议不要用directAllocate分配了,大家可 以用allocate和directAllocate分配内存后通过调试看一下ByteBuffer对像的属性,可以清楚的看到由allocate分配的 内存是由byte[]类型定义的,而由directAllocate分配的只提供了一个long型的数据,这个long型的数据就是一个C++指针的转换 值,他指向的是这段内存的首地址。
区别在于内存分配的方式,allocate分配的内存在jvm管理范围内,directAllocate分配的内存则不是由jvm管理,可以理解成是类似 C++那种分配...
最新推荐文章于 2025-03-30 19:49:45 发布
本文深入探讨了Java中内存分配的两种方式:allocate和directAllocate。allocate方式由JVM管理,而directAllocate方式则由操作系统直接管理。文章详细解释了这两种方式的区别,包括内存释放机制和性能考量,并提供了实际应用中的指导建议。
12万+

被折叠的 条评论
为什么被折叠?



