download:Spring 5 实战开发及新个性精讲
内存构造
程序计数器
作用,是记住下一条 jvm 指令的执行地址
是线程公有的
在线程上下文切换的过程中须要记录到下一条要执行的指令的地址,等到线程再次被调度到执行的时候,还是依据该线程的程序计数器,来找到下一条要执行的指令的地址
每个线程都有本人独有的程序计数器
惟一一个内存不会溢出的
随着线程创立而创立,随着线程销毁而销毁
栈
栈能够说是虚拟机栈中的局部变量表
局部变量表中寄存了编译期可知的各种根本数据类型,对象援用(不等于对象自身,可能是一个指向对象起始地址的援用指针,也可能是指向一个代表对象的句柄或其余与此对象相干的地位)和 returnAddress 类型(指向了一条字节码指令的地址)。
线程运行须要的内存空间
栈帧(参数,局部变量,返回地址):每个办法运行时须要的内存
一个栈由多个栈帧组成
栈先入后出
问题辨析
垃圾回收是否波及栈内存:不须要,栈内存是一次次办法调用产生的栈帧内存,而每一次办法调用后都会被弹出栈,主动被回收掉,不须要垃圾回收来波及栈内存
栈内存调配越大越好吗:栈内存过大会导致线程数变少,物理内存大小是无限的, 假如物理内存为 500M,如果栈内存为 250M,能运行的线程就只有俩个
办法内的局部变量是否线程平安:局部变量是线程公有的,不会受到其余线程烦扰,是线程平安的。然而给局部变量加上 static 润饰,就会有线程平安问题了!如果办法内局部变量没有逃离办法的作用范畴,它就是线程平安的。如果局部变量援用了对象,并逃离办法的作用范畴,须要思考线程平安。