jvm jvm 概要 jvm 运行图 影子页面 影子页面(Shadow Page)是指在虚拟化技术中,为了实现虚拟机对物理机的模拟,而在虚拟机中创建的与物理机页面相对应的页面。 影子页面通常由虚拟机监控器(Hypervisor)根据物理机的页面表而生成,用于保存物理机的页面数据,以便在虚拟机中访问物理机时进行地址转换和页面映射。 在虚拟机运行时,操作系统会将虚拟地址转换为物理地址,以访问物理机的内存和硬件资源。这个转换过程中,影子页面起到了关键的作用。当虚拟机尝试访问一个虚拟地址时,会触发一个页面异常,这时虚拟机监控器会检查影子页面表,以确定该虚拟地址所对应的物理地址。如果影子页面表中存在该物理地址的影子页面,那么虚拟机就可以继续执行;否则,虚拟机监控器会将该影子页面加载到物理内存中,并将物理地址写入影子页面表,以供虚拟机继续访问。 影子页面的使用可以保证虚拟机的隔离和安全性,因为每个虚拟机都有自己的影子页面表,并且影子页面表对虚拟机是透明的。这样就可以防止虚拟机直接访问物理内存和其他资源,从而保护宿主机和虚拟机的安全。 预留/黄色区域 当我们重新进入Java时,我们需要重新启用在虚拟机中可能已经被禁用的预留/黄色区域 。   *    * 在虚拟机中, 预留区域(Reserved Zone)的作用主要是为了防止栈溢出的攻击 。这个区域是在Java堆栈中设置的一个安全地带,用于保护程序的安全运行。   * 如果线程请求的堆栈大小超过了当前堆栈的容量,Java虚拟机会抛出StackOverflowError异常。   * 在这种情况下,如果存在预留区域,Java虚拟机就会在这个区域内分配新的堆栈,以容纳更多线程。   * 这样,即使在堆栈溢出的情况下,程序也能继续运行,而不会出现异常或崩溃。   * 需要注意的是,预留区域的大小是动态变化的,它会根据线程请求的堆栈大小进行调整。   * 如果请求的堆栈大小超出了当前预留区域的容量,Java虚拟机会尝试扩展预留区域的大小,以满足线程的需求。   * 此外,预留区域还可以用于实现一些特殊的功能,比如实现线程的本地存储(Thread-local storage),   * 为每个线程分配独立的内存空间,以存储线程的本地变量和数据。这   * 样可以避免不同线程之间的数据干扰和冲突,保证程序的安全性和稳定性。   *    * 黄色区域指的是线程私有的三个模块 ,   *     即虚拟机栈、   *     本地方法栈   *     程序计数器。   * 这些区域是隔离的,每个线程都有自己的私有实例,不允许其他线程访问。   * 这种隔离有助于保护线程数据的安全性和独立性。   * 虚拟机规范将这些区域划分为黄色,是为了强调它们是线程私有的,与共享的绿色区域相区别。   * 绿色区域是线程共享的数据区域,可以被多个线程共同访问和修改。   * 这种划分使得虚拟机能够更好地管理线程之间的协作和并发操作,从而提高程序的性能和安全性。   * 总之,黄色区域是虚拟机中线程私有的内存区域,用于存储线程的私有数据和执行线程的操作。   * 这种隔离有助于保护线程数据的安全性和独立性。 jvm 常量池类型说明 新页面