2.1定义 Java Virtual Machine Stacks (Java 虚拟机栈) 1.每个线程运行时所需要的内存,称为虚拟机栈 2.每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存 3.每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法(栈顶部的那个方法) 问题辨析 1.垃圾回收是否涉及栈内存? 不需要,栈内存只是一次次的方法调用,在调用结束后都会被弹出栈。会自动的回收掉,故而不需要垃圾回收管理我们的栈内存。(垃圾回收只会回收我们堆内存的无效对象,我们栈内存是不需要垃圾回收的) 2.栈内存分配越大越好吗? -Xss Size #设置栈内存大小 -Xss 1m -Xss 1024k -Xss 1048576 不指定大小的话,每个栈都是1m的大小(除windows外,windows系统默认配置看虚拟内存,其他操作系统都是1m)。 2.1.栈内存划的越大,会让线程数变得越小。 因为我们的物理内存的大小是一定的,比如一个线程用了1M内存,假设物理内存有500M,我可以有500个线程同时运行。假如我们设置栈帧大小为2M内存,这个机器就最多同时能跑250个线程。(栈大的好处,仅仅是为了更多次方法的递归调用。但并不会增快我们的运行效率,反而会让线程数目变少,不建议设置过大的栈内存,一般默认就可以了) 3.方法内的局部变量是否线程安全? 是线程安全的。 #下篇分解
9.jvm内存结构部分——栈的问题解析1
于 2022-06-16 13:13:32 首次发布