在Java中,每个线程都有自己的虚拟机栈。虚拟机栈是用于存储线程执行方法时的局部变量、方法参数、方法调用和返回的数据等信息的内存区域。每个方法在执行时都会在虚拟机栈上创建一个称为”栈帧”的数据结构,栈帧中包含了方法的局部变量表、操作数栈、动态链接等信息。
由于每个线程都有独立的虚拟机栈,因此虚拟机栈是线程私有的,不被多个线程共享。每个线程在创建时都会分配一块独立的虚拟机栈空间,并且在线程生命周期内,栈会动态地扩展和收缩以适应方法调用的需要。
需要注意的是,虚拟机栈的大小是有限制的,一般来说,每个线程的虚拟机栈都有一个固定的容量上限。当线程的方法调用层级过深时,虚拟机栈可能会抛出”栈溢出”异常。
栈区:
每个线程包含一个栈区,栈中只保存基础数据类型的值(比如int i=1中1就是基础类型的对象)和对象的引用以及基础数据的引用
每个栈中的数据(基础数据类型和对象引用)都是私有的,其他栈不能访问。
栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
堆区:
存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 。
方法区:
又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。(两者区别为堆区存放new出来的对象信息,方法区存放本身就具有的类信息)
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: “前端”工匠系列(二):合格的工匠,怎么做好价值落地
一、”技术鄙视链?” 如果你是一个技术人,相信都知道技术圈有个相互的鄙视链,这个链条从技术人自己认知的角度在以业务价值为中心嵌套的一层一层的环,就像洋葱,具体的描述这里不赘述了。 出门左拐随便抓住一个人问一下。这种偏自嘲类的观点,有点类似”程序员的穿着必须是格…