首页 > 编程语言 >java中虚拟机栈是线程共享的吗?

java中虚拟机栈是线程共享的吗?

时间:2023-07-11 20:31:59浏览次数:37  
标签:java 每个 对象 虚拟机 线程 方法 class

在Java中,每个线程都有自己的虚拟机栈。虚拟机栈是用于存储线程执行方法时的局部变量、方法参数、方法调用和返回的数据等信息的内存区域。每个方法在执行时都会在虚拟机栈上创建一个称为"栈帧"的数据结构,栈帧中包含了方法的局部变量表、操作数栈、动态链接等信息。


由于每个线程都有独立的虚拟机栈,因此虚拟机栈是线程私有的,不被多个线程共享。每个线程在创建时都会分配一块独立的虚拟机栈空间,并且在线程生命周期内,栈会动态地扩展和收缩以适应方法调用的需要。


需要注意的是,虚拟机栈的大小是有限制的,一般来说,每个线程的虚拟机栈都有一个固定的容量上限。当线程的方法调用层级过深时,虚拟机栈可能会抛出"栈溢出"异常。

栈区:

每个线程包含一个栈区,栈中只保存基础数据类型的值(比如int i=1中1就是基础类型的对象)和对象的引用以及基础数据的引用

每个栈中的数据(基础数据类型和对象引用)都是私有的,其他栈不能访问。

栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

堆区:

存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 。

方法区:

又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。(两者区别为堆区存放new出来的对象信息,方法区存放本身就具有的类信息)

标签:java,每个,对象,虚拟机,线程,方法,class
From: https://blog.51cto.com/u_16095802/6691703

相关文章

  • JavaWeb回顾与小结(八)
    分模块设计与开发介绍将项目按照功能拆分成若干个子模块,方便项目管理维护,扩展,也方便模块间的互相调用,资源共享分模块开发的好处增强代码的复用性:一些通用的工具类,实体类可以抽取到独立的模块,进行重用便于分工:按业务划分模块可以让开发人员编写代码更为独立,互不干扰......
  • Java扩展Nginx之三:基础配置项
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览经历了前面两篇的入门和编译源码之后,从本篇起,咱们用理论结合实战的方式进入系统的nginx-clojure学习之旅作为《Java扩展Nginx》系列的第三篇,本文会与大家一起了......
  • JAVA基础0711
    方法方法重载在同一个类中,方法名相同,参数列表不同。与返回值无关。参数列表不同:参数的个数不同。参数的对应的数据类型不同。方法的调用:执行方法中的代码方法名(参数列表);有返回值类型的方法:1.普通调用方法名(参数列表);2.赋值调用数据类型变量名=方法名......
  • Java语言初识
    Java语言入门Java的特性和优势简单性:就是c++语法的纯净版。没有头文件,指针运算,结构,联合,操作符重载,虚基类等等。由于语法基于c,因此学习起来完全不费力。面向对象:面向对象是一种程序设计技术,他将重点放在数据(即对象)和对象之间的接口上。模拟人的思维写程序,万物皆对象!可移植......
  • 七月十一号Java学习
       ......
  • java基础
    java注:本笔记是对以前学习内容的总结,因此,很容易出现一些多线程,JVM,框架,@Component注解等。如果你无法理解,可以前往元动力官网,这个网站的两位老师很厉害,本文就是基于他们的笔记来写的。序章计算机基础知识二进制的存储计算机中,所有数据都是以二进制来进行存储的,在这些之中1b......
  • 第二节 Java基础概念
    题目1:(选择)下列关于java变量声明那个是错误的:A.intx=5;B.doubled=3.14;C.chargrade=‘C’;D.Stringname=‘黑马程序员’;讲解:D字符串需要用双引号引起来题目2:(看代码说结果)看代码说结果,不要去运行。doublemoney=10.0;money=money+5;money-=2.......
  • ZeroMQ: Java 请求/响应和发布/订阅模式的简单实现
    转载于:https://blog.csdn.net/weixin_47951400/article/details/119142454 文章目录POM一、请求响应模式(ZMQ_REQ+ZMQ_REP)1.REP2.REQ3.测试REPREQ测试结果二、发布/订阅模式(ZMQ_PUB+ZMQ_SUB)1.PUB2.SUB3.测试PUBSUB测试结果 POM ......
  • 进程与线程
    简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运......
  • java连接mqtt总是自动断开的问题排查及解决
    问题描述最近在做一个视频监控平台,要同步下级平台的摄像头信息数据,是通过其他同事写的c++服务往mqtt里推数据,我这边通过java连接mqtt监听主题获取摄像头信息。刚开始写完都还好,但是测试过一段时间,发现javaclient连接总是会自动断开,并且还会有丢失消息的情况。一开始怀疑是网络......