首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中获取内存数据

在Java中获取内存数据
EN

Stack Overflow用户
提问于 2015-02-02 21:20:54
回答 4查看 96关注 0票数 0

我有以下C#代码:

代码语言:javascript
复制
  int num = Convert.ToInt32(this.Memory.ReadInt(
        this.Memory.BaseAddress() + 0x80f0cc, new int[] { 12, 0x6c5c }));

这将从内存中读取数据,并给出整数值。

这在Java中有可能实现吗?我试着在网上搜索,但什么也找不到。

EN

回答 4

Stack Overflow用户

发布于 2015-02-02 21:33:17

不,Java是专门设计来禁止这样的.但是..。

它不是官方支持的(并且它的工作方式/是否工作可能在不同的JVM实现中有所不同),但是sun.misc.Unsafe类允许人们做一些通常不应该做的事情。参见this article

摘录:

代码语言:javascript
复制
@Test
public void testCopy() throws Exception {
    long address = unsafe.allocateMemory(4L);
    unsafe.putInt(address, 100);
    long otherAddress = unsafe.allocateMemory(4L);
    unsafe.copyMemory(address, otherAddress, 4L);
    assertEquals(100, unsafe.getInt(otherAddress));
}

unsafe.getInt(otherAddress)调用可能是您在纯Java中能实现的最接近的功能。

有一个关于Unsafe是否应该获得官方支持的survey in 2014,但我不确定结果会是什么(如果有的话)。

票数 1
EN

Stack Overflow用户

发布于 2015-02-02 21:28:37

不是的。不可能用纯Java代码访问本机内存。您可以使用JNA或JNI链接到本机库,它们可以访问任意内存,但是Java本身运行在虚拟机中,不允许您显式地访问虚拟机之外的内的内存。

票数 0
EN

Stack Overflow用户

发布于 2015-02-02 21:30:59

您可以尝试转到Project Kenai并查看API及其示例:

Project Kenai

我还为其他正在尝试做类似事情的人找到了一个例子。希望能有所帮助。

Example

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28278698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档