用Java获取内存数据

时间:2015-02-02 13:20:54

标签: java c# memory memory-management

我有以下C#代码:

  int num = Convert.ToInt32(this.Memory.ReadInt(
        this.Memory.BaseAddress() + 0x80f0cc, new int[] { 12, 0x6c5c }));

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

这在Java中是否有可能实现?我尝试过在线搜索,但却无法获得任何结果。

4 个答案:

答案 0 :(得分:1)

不,Java专门设计为不允许...... 但是......

它没有得到官方支持(以及它是如何/是否在JVM实现之间可能有所不同),但是类sun.misc.Unsafe允许你做一些你通常不应该做的事情。请参阅this article

摘录:

@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 :(得分:0)

没有。使用纯Java代码无法访问本机内存。您可以使用JNA或JNI链接到本机库,它们可以访问任意内存,但Java本身在虚拟机中运行,并且不允许您在虚拟机外部的内明确访问内存。

答案 2 :(得分:0)

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

Project Kenai

我还找到了一个试图做类似事情的其他人的例子。希望它有所帮助。

Example

答案 3 :(得分:0)

Makky,你可以看看the old reply关于java中的内存管理。他描述了为什么你不能这样做。