为什么没有直接访问内存位置,比如Java中的指针?

这个问题在这里已经有了答案:

  • java真的有指针吗? [已完成] 9个答案

  • 你已经提到了自己的安全原因。 Java程序在名为Java Virtual Machine(JVM)的容器中运行,该容器控制内存管理。 这意味着出于安全性和稳定性原因,程序不能直接访问内存:Java程序不能损害其他进程的内存。

    其他原因是垃圾收集。 像C ++一样Java有一个new关键字,它为新对象分配内存。 但是java没有delete 。 不能再使用的对象的移除由GC自动完成。 我想这是避免直接内存访问的一个很好的理由。

    顺便说一句,即使你在C程序中使用指针,你也无法轻松访问操作系统可用的整个内存。 OS为您的进程分配的内存空间本地化的指针。

    下一条评论是关于直接访问java中的内存。 您有两种方法可以实现这一点:集成了Java和本机代码的JNI / JNA以及允许访问JVM托管堆之外的内存的sun.misc.Unsafe

    最后的评论甚至是问题:为什么你需要直接访问内存?


    JVM的设计目标是防止指针操作错误(编程错误)导致的各种内存损坏。

    手动内存管理由Java支持,但方式非常有限:

  • 字节内存缓冲区的操作(安全)
  • 直接内存操作(不安全)
  • 看看下面的Javadocs:

    http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html http://www.docjar.com/docs/api/sun/misc/Unsafe.html

    链接地址: http://www.djcxy.com/p/5417.html

    上一篇: Why there is no direct access to memory locations such as pointers in Java?

    下一篇: What is the value of a pointer if it is pointing to an array or an object?