Java 访问修饰符是使用操作系统的权限还是由 Java 本身控制访问?
Do Java access modifiers use permissions from the operating system or is the access controlled by Java itself?
我找到了很多关于 Java 访问修饰符的资源,这些资源解释了它们是什么、如何使用它们、为什么使用它们以及何时使用它们。但是,我没有发现关于它们如何工作或多少 Java 取决于操作系统来强制执行它们的讨论,如果是这样,强制执行的程度取决于所使用的操作系统。可能是我使用了错误的搜索词。
基本上它是 100% 由 Java 和 JVM 控制的,OS 与它无关。在控制对私有字段的访问方面没有硬件干预(例如)。只是JVM上的软件运行不让你(直接用反射即可)读取那个字段的内存位置。
AFAIK,所有 Java 对象都分配在堆上,这只是可以读取或写入的普通内存。 JVM 的某些部分实际上可能受到 OS 的保护——例如可执行内存或堆栈。但是 Java 是一个统一的内存系统,其中所有内存、所有对象及其字段都位于相同的 OS "bucket" 内存中,这就是堆。
我认为这有时被称为 SISD 模型 -- "single instruction single data," 其中 "single data" 只是堆。是的,我忽略了英特尔的 SIMD 指令,因为这些指令相对较少。
我找到了很多关于 Java 访问修饰符的资源,这些资源解释了它们是什么、如何使用它们、为什么使用它们以及何时使用它们。但是,我没有发现关于它们如何工作或多少 Java 取决于操作系统来强制执行它们的讨论,如果是这样,强制执行的程度取决于所使用的操作系统。可能是我使用了错误的搜索词。
基本上它是 100% 由 Java 和 JVM 控制的,OS 与它无关。在控制对私有字段的访问方面没有硬件干预(例如)。只是JVM上的软件运行不让你(直接用反射即可)读取那个字段的内存位置。
AFAIK,所有 Java 对象都分配在堆上,这只是可以读取或写入的普通内存。 JVM 的某些部分实际上可能受到 OS 的保护——例如可执行内存或堆栈。但是 Java 是一个统一的内存系统,其中所有内存、所有对象及其字段都位于相同的 OS "bucket" 内存中,这就是堆。
我认为这有时被称为 SISD 模型 -- "single instruction single data," 其中 "single data" 只是堆。是的,我忽略了英特尔的 SIMD 指令,因为这些指令相对较少。