JNI 的 Java 内存管理

发布于 2024-09-26 03:11:28 字数 228 浏览 4 评论 0原文

我有两个问题:

  1. 如果我对某个方法进行 JNI 调用并且 JNI 方法泄漏内存怎么办?一旦该方法完成,JVM 垃圾收集器就能够收回该内存。我听说JVM不管理JNI使用的堆空间?但是 JNI 使用的内存是 Java 进程使用的内存的一部分?

  2. 是否一定要用JNI来实现IPC?还有哪些流行的 Java 技术或者是否有开源库可以在 Java 中实现共享内存?

I have two questions :

  1. What if I have a JNI call to a method and the JNI method leaks memory. Once this method completes will the JVM Garbage collector be able to get that memory back. I heard that the JVM does not manage the Heap Space used by JNI ? But the memory used by JNI is a part of the memory used by the Java process ?

  2. Is it absolutely necessary to use JNI to achieve IPC ? What are the other popular Java techniques or is there a Open Source Library to achieve Shared memory in Java ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我的鱼塘能养鲲 2024-10-03 03:11:29
  1. 否:“JNI 框架不为在本机端执行的代码分配的非 JVM 内存资源提供任何自动垃圾收集”(维基百科)。
  2. 不,Java 有 套接字 确实还有 ProcessBuilder。共享内存可以通过 MappedByteBuffer 来实现。
  1. No: "the JNI framework does not provide any automatic garbage collection for non-JVM memory resources allocated by code executing on the native side" (Wikipedia).
  2. No, Java has sockets and indeed ProcessBuilder. Shared memory can be achieved with MappedByteBuffer.
一紙繁鸢 2024-10-03 03:11:29
  1. 您需要释放在本机代码中创建的任何操作系统资源,例如文件描述符、内存地址(通过 malloc 等分配),因为它们不与任何 jvm 实例绑定。
  2. 您可以考虑使用内存映射文件 (示例)。

  3. 您可以在 IPC 上下文中使用 RPC(计算机与计算机之间),例如套接字、Web 服务、JMS 等。

  1. You need deallocate any os resource created in native code, such as File Descriptor, memory address (allocate by malloc. etc) because they are not binding with any jvm instance.
  2. You can consider use Memory-Mapped Files (sample).

  3. You can use RPCs (between computer and computer) in IPC context, such as socket, web service, JMS, etc.

故人的歌 2024-10-03 03:11:29
  1. 很可能是的 - 尽管我不完全确定是否存在清除该记忆的方法。
  2. 看看 ProcessBuilder - 它排除JNI来实现IPC可能会有一些帮助。
  1. in all likelihood yes - though i'm not entirely sure whether there doesn't exist a way to clear that memory.
  2. take a look at ProcessBuilder - it might be of some help to exclude JNI to achieve IPC.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文