From 9cb0bf6affd9bee096160669352f6cab84687d84 Mon Sep 17 00:00:00 2001 From: CoteNite <148367665+CoteNite@users.noreply.github.com> Date: Fri, 7 Feb 2025 19:14:36 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E7=AE=80=E5=8C=96=E5=8E=9F?= =?UTF-8?q?=E6=96=87=E9=80=BB=E8=BE=91=E4=BB=A5=E4=BE=BF=E4=BA=8E=E7=90=86?= =?UTF-8?q?=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将原文中的 “如果栈的内存大小可以动态扩展, **如果**虚拟机在动态扩展栈时无法申请到足够的内存空间” 修改为 “如果栈的内存大小可以动态扩展, **那么当**虚拟机在动态扩展栈时无法申请到足够的内存空间” --- docs/java/jvm/memory-area.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/java/jvm/memory-area.md b/docs/java/jvm/memory-area.md index 2d9c1a78..c841024a 100644 --- a/docs/java/jvm/memory-area.md +++ b/docs/java/jvm/memory-area.md @@ -88,12 +88,12 @@ Java 虚拟机规范对于运行时数据区域的规定是相当宽松的。以 Java 方法有两种返回方式,一种是 return 语句正常返回,一种是抛出异常。不管哪种返回方式,都会导致栈帧被弹出。也就是说, **栈帧随着方法调用而创建,随着方法结束而销毁。无论方法正常完成还是异常完成都算作方法结束。** -除了 `StackOverFlowError` 错误之外,栈还可能会出现`OutOfMemoryError`错误,这是因为如果栈的内存大小可以动态扩展, 如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出`OutOfMemoryError`异常。 +除了 `StackOverFlowError` 错误之外,栈还可能会出现`OutOfMemoryError`错误,这是因为如果栈的内存大小可以动态扩展, 那么当虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出`OutOfMemoryError`异常。 简单总结一下程序运行中栈可能会出现两种错误: -- **`StackOverFlowError`:** 若栈的内存大小不允许动态扩展,那么当线程请求栈的深度超过当前 Java 虚拟机栈的最大深度的时候,就抛出 `StackOverFlowError` 错误。 -- **`OutOfMemoryError`:** 如果栈的内存大小可以动态扩展, 如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出`OutOfMemoryError`异常。 +- **`StackOverFlowError`:** 如果栈的内存大小不允许动态扩展,那么当线程请求栈的深度超过当前 Java 虚拟机栈的最大深度的时候,就抛出 `StackOverFlowError` 错误。 +- **`OutOfMemoryError`:** 如果栈的内存大小可以动态扩展, 那么当虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出`OutOfMemoryError`异常。 ![](https://oss.javaguide.cn/github/javaguide/java/jvm/%E3%80%8A%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E8%99%9A%E6%8B%9F%E6%9C%BA%E3%80%8B%E7%AC%AC%E4%B8%89%E7%89%88%E7%9A%84%E7%AC%AC2%E7%AB%A0-%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%A0%88.png)