为什么没有直接访问内存位置,比如Java中的指针?
这个问题在这里已经有了答案:
你已经提到了自己的安全原因。 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?