线程私有:
- 程序计数器(PC Register):保存下一条指令执行地址,不存在内存溢出问题,线程私有(cpu切片运行,需保证切回原线程继续运行后续代码)。
- 虚拟机栈(JVM Stacks):线程运行时需要的内存空间,由多个栈帧组成,每调用一个方法对应一个栈帧(方法运行时所需要的内存)。虚拟机栈存放局部变量表、操作数栈、动态链接、方法出口等信息,存在内存溢出风险,线程私有(每个线程都有自己独立的数据)。垃圾回收不涉及栈内存,栈帧随着方法结束而出栈,从而释放内存。默认分配大小1M,可通过-Xss参数修改。
- 局部变量如果作为参数或方法返回,则可能存在线程安全问题。如果只在方法内部使用,则不存在线程安全问题。
- 栈帧过多可能导致内存溢出(递归),栈帧过大也可能导致栈溢出。
- 本地方法栈(Native Method Stacks):本地方法运行时所需的内存,线程私有。