Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 主命令行参数存储在堆栈内存还是堆内存中?_Java_Memory_Jvm_Stack_Heap Memory - Fatal编程技术网

Java 主命令行参数存储在堆栈内存还是堆内存中?

Java 主命令行参数存储在堆栈内存还是堆内存中?,java,memory,jvm,stack,heap-memory,Java,Memory,Jvm,Stack,Heap Memory,这可能是个愚蠢的问题 查看JVM堆栈内存和堆内存通常是如何在大学中绘制的,它们通常显示调用堆栈和被调用的方法、其中定义的变量以及参数堆栈内存和任何分配的对象堆内存 举一个简单的hello world示例: 公共课程{ 公共静态无效字符串[]args{ System.out.println你好,世界!; } } 它们总是忽略图形中的静态主参数字符串[]args。是否有一个特殊的规则或存储参数的位置不同于正常的堆栈内存参数 如果无法在Google中找到结果,我必须假设如果没有特殊规则/异常,我应该在

这可能是个愚蠢的问题

查看JVM堆栈内存和堆内存通常是如何在大学中绘制的,它们通常显示调用堆栈和被调用的方法、其中定义的变量以及参数堆栈内存和任何分配的对象堆内存

举一个简单的hello world示例:

公共课程{ 公共静态无效字符串[]args{ System.out.println你好,世界!; } } 它们总是忽略图形中的静态主参数字符串[]args。是否有一个特殊的规则或存储参数的位置不同于正常的堆栈内存参数


如果无法在Google中找到结果,我必须假设如果没有特殊规则/异常,我应该在堆栈中有一个args变量,该变量指向包含命令行参数的堆分配数组,我错了吗?

命令行参数存储在字符串数组中。因此,命令行参数存储在堆上


我假设你的主管——正如你在评论中所建议的那样——为了清楚起见省略了它们。

数组是对象。就是这样。谢谢@Turing85,所以它们没有奇怪的存储位置或例外?那么,为了清晰起见,是不是把它从绘图中省略了?我认为没有规则。任何JVM都可以明智地选择其中之一。我相信@Turing85是正确的,当前的Oracle JVM版本使用堆,但是如果开发人员选择使用堆栈,我看不到任何东西会阻止下一个版本使用堆栈。好的,我必须自己更正。JLS对于对象的存储位置非常肤浅。另一方面,heap非常详细:heap是运行时数据区域,所有类实例和数组的内存都是从该区域分配的。参数几乎与局部变量相同,只是在方法外部初始化。每个方法调用都会在堆栈上获得一个框架,其中包括包含参数的局部变量。确保引用的实例在堆上。所有实例都在其中。JVM规范: