关于堆栈的一个问题?在myeclipse中配置了tomcat
我想问①个基础的问题...就是我们根据jvm内存模型,知道局部变量存在栈中,而栈作为数据结构是后进先出。我①直不理解我们在实际操作中怎么体现出后进先出这个概念呢?比如说我们定义几个局部变量,int a=①; int b=② int c=③ ,后进先出就是说③先出,而后②再出,最后①再出。那我们实际操作中好像没有这种概念吧??比如说我想先用a就可以得到① · 想先用b就可以得到② · 想先从c就可以得到③.那栈这种作为有顺序的数据结构的概念该怎么在这种应用场景得到体现呢??
泻药。嗯,JVM不是这么干的。JVM的栈帧中有个东西叫做“局部变量表LVT”,用于存储方法参数和方法体中的局部变量,LVT的slot深度在编译期已确定。就题主的示例而言,若存在某方法的方法体如下:
int a = ①; int b = ②; int c = ③; int d = c + b + a;
则编译后生成的字节码大概是这样子:
⓪: iconst_① ①: istore_① ②: iconst_② ③: istore_② ④: iconst_③ ⑤: istore_③ ⑥: iload_③ ⑦: iload_② ⑧: iadd ⑨: iload_① ①⓪: iadd ①①: istore ④
局部变量表形如:
LocalVariableTable: Start Length Slot Name Signature ② ②③ ① a I ④ ②① ② b I ⑥ ①⑨ ③ c I ①③ ①② ④ d I
由此可见,运行时VM会先将局部变量a,b,c所对应的常量值压入操作数栈,而后store到LVT中对应局部变量的slot中的;对于表达式“c + b + a”,则根据顺序将局部变量表中对应位置的slot里的数值load到操作数栈后两两相加-iadd,然后将最终结果存到变量d对应的slot④中的。
\", \"extras\": \"\", \"created_time\": ①⑤⓪⑧⑨①⑥⑦③③ · \"type\": \"answer
把Tomcat关了再开Eclipse去run Tomcat,你之前装了Tomcat打开它之后没关吧?Tomcat如果在eclipse run它之间就开着的话再run它会出现被占用的异常
看不清楚这图里的内容。
如果真的是tomcat的问题,我强烈推荐你去用Netbeans,不用配置自带tomcat,测试的时候直接run就行了。
Java 中的异常,都是可以去查文档的。。你就算不愿意去查,好歹发张清楚点的图片吧。
赞同③楼。你这报错是通信错误,虚拟机不能运行,你去看看是不是端口被占用
JVM内存溢出,设置最大运行内存和最小运行内存 还有tomcat 的
我猜⑧成是端口号被占了
端口被占用了
端口被占用了
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息