Java基本数据类型存储在JVM中的存储位置介绍

 更新时间:2023年07月31日 11:31:15   作者:普通网友  
这篇文章主要介绍了Java基本数据类型存储在JVM中的存储位置,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java基本数据类型存储在JVM中的存储位置

我们都知道虚拟机栈来存储通过栈帧的形式来存储每一个方法,堆来存储所有对象实例和数组。

而对基本数据类型,即可能声明在方法的局部变量中,也可能声明在类的成员中,这就造成并没有明确的规定来说明基本数据类型到底是存储在堆中还是栈中。

我在 SO 上寻找到了答案

Simplistic answer: it depends on where the variable is declared, not on its type.
Local variables are stored on the stack. Instance and static variables are stored on the heap.

简单来说:这取决于变量的声明位置,而不是它的类型。

局部变量存储在栈中,实例变量和静态变量存储在堆中。

也就是说,基本数据类型如果声明在方法内,那么它就存储在栈中,如果声明在类的成员或声明为 static 那么就存储在堆中。

参考链接:Where does the JVM store primitive variables?

基本数据类型的成员变量放在jvm得哪块内存区域里?

java虚拟机栈是线程私有的,生命周期跟线程相同,每个方法调用的时候都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。

每个方法调用的过程,就代表了一个栈帧在虚拟机栈中入栈到出栈的过程,当进入一个方法时,这个方法在栈中需要分配多大的内存都是完全确定的,方法运行时不会改变局部变量表的大小——《深入理解java虚拟机第二版》

很多java程序员一开始就被网上的一些教程所误导:基本数据类型放在栈中,数组和类的实例放在堆中。 这个说法不准确,事实上,如上面的全局变量i,他是存放在java堆中。因为它不是静态的变量,不会独立于类的实例而存在,而该类实例化之后,放在堆中,当然也包含了它的属性i。        

如果在方法中定义了int i = 0;则在局部变量表创建了两个对象:引用i和0。

这两个对象都是线程私有(安全)的。

比如定义了int[] is = new int[10]. 定义了两个对象,一个是is引用,放在局部变量表中,一个是长度为10的数组,放在堆中,这个数组,只能通过is来访问,方法结束后出栈,is被销毁,根据java的根搜索算法,判断数组不可达,就将它销毁了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot添加AOP日志配置详解

    springboot添加AOP日志配置详解

    这篇文章主要介绍了springboot添加AOP日志配置详解,日志是一种在软件开发中常用的技术,用于记录和跟踪应用程序的运行过程,通过AOP日志,开发人员可以实时监控应用程序的行为,包括方法的调用、参数的传递和返回值的获取等,需要的朋友可以参考下
    2023-10-10
  • Windows系统下如何查找JDK的安装路径

    Windows系统下如何查找JDK的安装路径

    这篇文章主要介绍了Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看环境变量,需要的朋友可以参考下
    2025-03-03
  • Spring Boot学习入门之统一异常处理详解

    Spring Boot学习入门之统一异常处理详解

    我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。下面这篇文章主要给大家介绍了关于Spring Boot学习入门之统一异常处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-09-09
  • SpringBoot构建ORM框架的方法步骤

    SpringBoot构建ORM框架的方法步骤

    本文主要介绍了SpringBoot构建ORM框架的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java实现大文件的分片上传与下载(springboot+vue3)

    Java实现大文件的分片上传与下载(springboot+vue3)

    这篇文章主要为大家详细介绍了java基于springboot+vue3如何大文件的分片上传与下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-06-06
  • 深入理解Netty FastThreadLocal优缺点及实现逻辑

    深入理解Netty FastThreadLocal优缺点及实现逻辑

    本文以线上诡异问题为切入点,通过对比JDK ThreadLocal和Netty FastThreadLocal实现逻辑以及优缺点,并深入解读源码,由浅入深理解Netty FastThreadLocal
    2023-10-10
  • SWT(JFace)体验之Icon任我变

    SWT(JFace)体验之Icon任我变

    SWT(JFace)体验之Icon任我变
    2009-06-06
  • Java高效映射工具MapStruct的使用示例

    Java高效映射工具MapStruct的使用示例

    MapStruct 是一个 Java 注解处理器,用于在不同 Java Beans 或数据传输对象(DTOs)之间自动生成类型安全的映射代码,这是一个编译时映射框架,意味着它利用注解在编译时生成代码,本文将给大家介绍一下Java注解处理器MapStruct的使用示例,需要的朋友可以参考下
    2023-12-12
  • java设计模式--建造者模式详解

    java设计模式--建造者模式详解

    这篇文章主要介绍了Java设计模式之建造者模式,结合具体实例形式分析了建造者模式的概念、原理、实现方法与相关使用注意事项,需要的朋友可以参考下
    2021-07-07
  • 70行Java代码实现深度神经网络算法分享

    70行Java代码实现深度神经网络算法分享

    这篇文章主要介绍了70行Java代码实现深度神经网络算法分享,涉及神经网络的计算过程,神经网络的算法程序实现,多层神经网络完整程序实现等相关内容,具有一定参考价值,需要的朋友可以参考下。
    2017-11-11

最新评论