0
点赞
收藏
分享

微信扫一扫

马士兵MCA架构师Java互联网架构师 马士兵AI人工智能工程师

'​​百度网盘​​

提取码:af28  

概括地说来,JVM初始运行的时候都会分配好Method Area(方法区)和Heap(堆),而JVM 每遇到一个线程,就为其分配一个Program Counter Register(程序计数器),VM Stack(虚拟机栈)和Native Method Stack(本地方法栈),当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为什么我把内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说知发生在Heap上)的原因。'



线程.png


PC:programCounter 指令

TSL:treadLocalStorage 线程独有内存数据

线程间容易交互,有共享内存


如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量(被称为static memory local to a thread 线程局部静态变量),就需要新的机制来实现。这就是TLS。


线程局部存储在不同的平台有不同的实现,可移植性不太好。幸好要实现线程局部存储并不难,最简单的办法就是建立一个全局表,通过当前线程ID去查询相应的数据,因为各个线程的ID不同,查到的数据自然也不同了。但Windows系统采用了每个线程建线程专享的索引表,表的条目为线程局部存储的地址。在线程执行的任何代码处,都可以查询本线程的这个索引表获得要访问的线程局部存储的地址。



操作系统.png

递归



递归.png


递归的缺点.png

采取数学归纳法,进行递归




数学归纳法.png



链表1.png


链表1-1.png


链表2.png


链表2-1.png


链表2-2.png

线程池



线程.png


线程池1.png


线程池2.png


线程池3.png

举报

相关推荐

0 条评论