【问题标题】:java.nio.MappedByteBuffer virtual/physical addressjava.nio.MappedByteBuffer 虚拟/物理地址
【发布时间】:2014-09-15 02:46:08
【问题描述】:

我在实践中对直接映射缓冲区的了解是

直接缓冲区始终位于垃圾收集堆之外。

所以我猜想在运行时找出一些有趣的信息是有意义的并且是可能的。具体来说,如何获取缓冲区的起始虚拟地址、缓冲区的起始物理地址和缓冲区大小?我正在使用ubuntu,并且对虚拟->物理翻译部分也很好奇。有什么工具可以实现这一目标吗?

【问题讨论】:

  • 有意义,但不一定能。 API 文档没有提供访问该信息的机制。
  • 不需要来自API。操作系统方面是否有任何其他应用程序/工具可以解决?
  • 当然。但是你甚至没有告诉你正在使用哪个操作系统。你把你的问题标记错了。如果你想知道如何获取一个逻辑地址的物理地址,它与Java无关。
  • 感谢您的评论。你说得对,这是两个不同的问题,我说得不够清楚。

标签: java ios buffer nio mmap


【解决方案1】:

您知道缓冲区大小是因为您创建了它。

你可以通过JNI获取虚拟地址。

没有办法获得物理地址,如果可以的话,你也无能为力。

【讨论】:

  • 由于我在硬件方面为缓冲区工作,所以物理地址实际上对我来说非常重要。在概念上应该可以使用操作系统端的工具来解决它。我只是好奇这个工具是什么。
  • 如果您在内核内部,您当然可以获得物理地址,但是您没有 Java 或 MappedByteBuffer。您必须更详细地解释您的问题。
  • 这是我的问题。有没有特定的方法来获得这个?说我是否可以从我的 java 程序启动系统调用以“窥视内核”以获取物理地址?
猜你喜欢
  • 2015-05-04
  • 2013-05-05
  • 1970-01-01
  • 2017-07-07
  • 2017-03-10
  • 2014-03-15
  • 2012-02-18
  • 1970-01-01
相关资源
最近更新 更多