JVM---内存结构
程序计数器 Program Counter Register 是记住下一条JVM指令的执行地址 特点 是线程私有的 不会存在内存溢出 虚拟机栈 每个线程运行所需要的内存,成为虚拟机栈 每一个栈是由多个栈帧组成,栈帧是每个方法运行时需要的内存,一个栈帧对应着一个方法调用 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法 垃圾回收是否涉及栈内存? 不会,栈内存是一次次的方法调用产生的栈帧内存,而栈帧内存在方法调用完成后,会自动出栈。 栈内存分配越大越好吗? 通过参数-Xss size参数来指定栈的大小 栈内存如果分配的大,则可以执行的线程数,越来越少,因为物理内存是一定的。 方法内的局部变量是否是线程安全? 局部变量是线程私有的,所以是线程安全的 如果变量是多个共享的,则需要考虑线程安全问题 总结:如果方法内的局部变量没有逃离方法的作用范围,它是线程安全的 如果局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全 (引用作为参数,作为返回值) /** * 局部变量的线程安全问题 */ public class Demo1_17 { public static void main ( String [ ] args ) { StringBuilder sb = new StringBuilder ( ) ; sb . append ( 4 ) ; sb . append (