java - 当内存损坏时,Java 中的相同引用/实例变量会发生什么?
问题描述
假设有两个变量指向同一个实例:
var obj1 = new Object();
var obj2 = obj1;
是否有可能obj1
由于内存位翻转(例如硬件故障)而指向错误的内存地址?
so
obj1
指向无效的内存地址,但obj2
仍然有效,并指向创建的“new Object()”。
解决方案
不在“Java语言”中。语言规范假设机器正常工作,我假设“位翻转”是指硬件故障的类型。
如果您开始考虑诸如 RAM 的随机故障、宇宙射线、来自其他维度的无所不能的存在等因素 - 那么一切皆有可能,但应该从问题中删除“Java”标签。
更新(在另一个答案下的一些评论之后)
我说“Java 语言”,因为这个问题将 Java 与 JVM 混为一谈。Java 程序可以在多个 VM 上运行 - 并且可以以不同的方式进行编译。Dalvik 和 JVM 很常见(现在很难说哪一个更常见),但是仍然有很多代码使用两代 GWT 编译器 TeaVM、RoboVM。GraalVM 变得越来越流行。
Java 规范(又名 Java 语言)不受物理世界的影响。它是一种语言的理想。询问它是否会受到硬件故障的影响,就像询问一米是否可以短于 100 厘米,如果它是由劣质材料制成的。
另一方面,Java 的实际实现会受到硬件故障的影响,但这些故障不是 Java 特定的。在大多数情况下,问题中描述的“变量”的Java构造与低级实现之间甚至不存在映射(将有一个堆栈,一个寄存器,或者闭包中的一个键,或者它可能会完全优化)。
所以,这个问题要么没有意义,要么与 Java 无关。
推荐阅读
- arrays - numpy中具有不同数据类型的二维数组
- linux - 我试图在脚本中按 Ctrl D 但我把它弄坏了?
- excel - VBA - 如果网络驱动器的字母映射未知,如何更改驱动器(ChDrive)
- ruby-on-rails - 如何在迁移中将列类型更改为字符串大写
- java - spring boot + gcloud + “502 Bad Gateway”
- python - 你能把两个不同长度的字典相乘来创建第三个字典吗?
- c++ - const 指针的模板参数推导失败
- linux - 在 32 位 Linux 上使用 tf.lite 模型进行推理
- sockets - 如何通过套接字发送实时esp8266数据(每10ms)ERNOMEM
- azure - 您没有将应用添加到此应用服务计划的正确权限?