Administrator
Administrator
Published on 2025-01-13 / 2 Visits
0
0

2024.12.16

JVM

代码沙箱机制

Java 中的代码沙箱(Sandbox)机制是一种安全措施,旨在限制 Java 应用程序的行为,以防止潜在的安全风险。它为应用程序提供了一个受控的执行环境,确保这些应用只能访问被允许的资源和功能,从而保护主机系统免受恶意或不可信代码的危害。沙箱机制在 Java Applet 和 WebStart 应用中尤为重要,因为这些应用通常是通过互联网下载并在用户的计算机上运行的。

Native关键字

在 Java 中,native 关键字用于声明一个方法,表明该方法的实现不是用 Java 语言编写的,而是用其他编程语言(如 C 或 C++)实现的。这种特性允许 Java 程序调用本地操作系统资源或与其他非 Java 编写的代码进行交互,从而扩展了 Java 的功能范围。

在Java虚拟机(JVM)中,栈(Stack)是用于管理方法调用和局部变量的一种数据结构。每个线程在创建时都会创建一个私有的Java虚拟机栈(JVM Stack),其中保存了帧(Frame)的列表,每个方法调用都会创建一个新的帧。

Java虚拟机栈

  • 每个线程都有自己的虚拟机栈,独立于其他线程。

  • 栈的生命周期与线程相同,即当线程启动时创建,线程结束时销毁。

栈帧

  • 每次调用一个方法时,都会创建一个新的栈帧,并将其压入当前线程的 Java 虚拟机栈顶。

  • 当方法执行完毕后,该栈帧会被弹出并丢弃,控制权返回给上一个栈帧对应的方法。

  • 栈帧包含方法的局部变量数组、操作数栈、动态链接、方法出口等信息。

局部变量数组

  • 存储了方法参数和方法内部定义的局部变量。

  • 局部变量数组中的每一个槽位(Slot)可以存储基本数据类型或对象引用,但不能直接存储对象本身,对象总是存储在堆中

操作数栈

  • 用于存储操作数和计算结果。

  • 主要用于指令集的操作数传递和运行结果的暂存。

动态链接

  • 用来支持方法调用链上的回溯,比如访问外层方法的局部变量或静态变量。

方法出口信息

  • 包含正常完成出口和异常完成出口的信息,用于确定方法执行结束后如何将控制权返还给调用者。

栈溢出

  • 如果单个线程的 Java 虚拟机的栈深度超过限制,就会抛出 StackOverflowError错误。这通常发生在递归调用过深的情况下。

内存不足

  • 如果线程创建的 Java 虚拟机栈所需的内存超出了进程内存的限制,或者没有足够的本地内存来分配新的栈,就会抛出 OutOfMemoryError


Comment