我知道指针是一个引用内存地址的变量,Java不支持指针,因为不安全和复杂性问题。那怎么可以直接在Java中访问内存寻址?但是Java仍然使用内存位置和操作部分。我们不能直接在Java中访问内存寻址,为什么访问时没有安全性?在Java中直接/间接访问内存操作的方式有多少?
如果我想编写基于内存管理概念的代码,那么我该如何用Java做呢?
避免不在Java中直接或间接访问内存位置的实际原因(除了复杂性或不安全之外还有其他原因)?我在google上看过这个但是我无法找到好的答案。
答案 0 :(得分:2)
JVM的设计目标是防止由指针操作错误(编程错误)引入的各种内存损坏。
Java支持手动内存管理,但方式非常有限:
查看以下Javadoc:
http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html http://www.docjar.com/docs/api/sun/misc/Unsafe.html
答案 1 :(得分:0)
您自己已经提到了安全原因。 Java程序在名为Java虚拟机(JVM)的容器中运行,该容器控制内存管理。这意味着程序无法直接访问内存,出于安全性和稳定性的原因:java程序不能破坏其他进程的内存。
其他原因是垃圾收集。与C ++一样,Java有new
关键字为新对象分配内存。但是java没有delete
。 GC不会自动删除不能再使用的对象。我想这是避免直接内存访问的一个很好的理由。
下一条评论是关于直接访问java中的内存。您有两种方法可以执行此操作:集成了Java和本机代码的JNI / JNA以及允许访问JVM托管堆外部内存的sun.misc.Unsafe
。
最后的评论甚至是问题:你为什么需要直接访问内存?