张春 发表于 2024-9-3 00:58:54

【口试】jvm静态变量和局部变量对比

1. 说明



[*]1.在Java假造机(JVM)中,静态变量(类变量)和局部变量是两种差异类型的变量,它们在多个方面存在明显的区别。
[*]2.静态变量和局部变量在声明位置、生命周期、访问方式、初始化、存储空间和线程安全性等方面都存在显着的区别。
[*]3.在编程过程中,应根据详细需求选择符合的变量类型,并思量其潜在的线程安全问题。
2. 声明位置与所属



[*]1.静态变量(类变量):由static关键字修饰,属于类本身,不依赖于类的任何实例。它们被定义在类的静态块或类的成员变量部分。
[*]2.局部变量:定义在方法体内或方法参数中,属于方法或代码块。局部变量在每次方法调用时创建,并在方法执行完毕后烧毁。
3. 生命周期



[*]1.静态变量:随着类的加载而加载到JVM的方法区(静态区),当类被卸载时才会烧毁。这意味着静态变量在程序的整个运行期间都存在。
[*]2.局部变量:其生命周期与方法的执行周期雷同。一旦方法被调用,局部变量被创建并初始化;当方法执行完毕后,局部变量被烧毁。
4. 访问方式



[*] 1.静态变量:可以通过类名直接访问(保举方式),也可以通过类的实例来访问。但出于性能和代码清晰度的思量,保举利用类名直接访问静态变量。
[*] 2.局部变量:只能在定义它们的方法或代码块内部访问。
5. 初始化



[*]1.静态变量:如果没有显式初始化,则会被自动初始化为对应数据类型的默认值(如int默认为0,boolean默认为false等)。静态变量的初始化发生在类加载阶段。
[*]2.局部变量:必须在利用前显式初始化,否则会导致编译错误。
6. 存储空间



[*]1.静态变量:存储在JVM的方法区(静态区),这是一个所有线程共享的内存地区。
[*]2.局部变量:存储在JVM的栈内存中,详细为栈帧中的局部变量表部分。局部变量表是线程的私有数据,每个线程都有本身独立的栈空间。
7. 线程安全性



[*]1.静态变量:由于被所有实例共享,且存储在共享的内存地区,因此存在线程安全问题。如果多个线程同时访问并修改同一个静态变量,可能会导致数据不同等。
[*]2.局部变量:每个线程的栈帧都是独立的,局部变量存储在栈帧的局部变量表中,因此不存在线程安全问题。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【口试】jvm静态变量和局部变量对比