page contents

关于JVM组成部分的疑问

Pack 发布于 2020-02-19 15:47
阅读 480
收藏 0
分类:Java开发

在网上找到两种有关JVM组成部分的结构图:

attachments-2020-02-54X5fc6p5e4ce7e008bf0.png

上面这张图里面有一个“直接内存”的东西,解释说和NIO有关,还有一张图:

attachments-2020-02-xfQCEwqZ5e4ce7e996186.png

这里面有个本地接口,这个本地接口和本地方法栈有什么关系?还有对于JVM的组成结构到底是什么样的?官网上并没有找到有关JVM的组成结构图,可能是我没有找到吧。

399
Pack
Pack

直接内存并不是虚拟机运行时数据区的一部分,也不是Java 虚拟机规范中定义的内存区域。在JDK1.4 中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的 I/O 方式,它可以使用 native 函数库直接分配堆外内存,然后通过一个存储在Java堆中的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在 Java 堆和 Native 堆中来回复制数据。

本机直接内存的分配不会受到Java 堆大小的限制,受到本机总内存大小限制
直接内存也可以由 -XX:MaxDirectMemorySize 指定
直接内存申请空间耗费更高的性能
直接内存IO读写的性能要优于普通的堆内存
当我们的需要频繁访问大的内存而不是申请和释放空间时,通过使用直接内存可以提高性能。

本地方法栈和本地方法接口是JVM中调用底层C++方法使用的,不用太关心

请先 登录 后评论