Java数据类型在内存中储存原理
java是强类型语言,分为基本数据类型和引用数据类型
如图,
数据类型:
我们都知道数据都是存储在内存中的,而java语言分为JDK和JRE
jdk全称叫做 Java development kit 翻译过来叫做 java开发工具包(例如javac编译器) jre
JRE全称叫做 Java Runtime Environment 翻译过来叫做 java运行时环境(包括JVM和核心类库)
Java语言的特性跨平台的原理就是靠同一个Java程序字节码文件可以在不同操作系统对应的JVM虚拟机上运行
当一个Java程序开始运行的时候就会开启一个JVM(java虚拟机),并创建对应的栈和堆和方法区
Java栈:
只保存基本数据类型和对象的引用
1.类似水杯,先进后出
2.每一个线程包含一个栈区,栈与栈之间是私有的
java堆:
当java创建一个类的对象或者数组时,都在堆中为新对象分配内存
1.类似管道,先进先出
2.虚拟机中只有一个堆,线程共享
方法区:
类型信息和类静态变量都保存在方法区中,类型信息是由类加载器在类加载的过程中从类文件中提取出来的信息。
所有进程共享一个方法区所以是线程安全的
补:需要注意的一点是,常量池也存放于方法区中。
所以:
栈存放基本数据类型和对象的引用
堆存放对象和数组的实体
对象的引用:String是引用类型,String a = “Hello”,可拆分为 int a = 13212(假设这个是地址) ,然后这个地址值------------>指向堆中的存储的“Hello”
注意:
虽然栈存放的基本数据类型,但不是所有基本数据类型都存放在栈中,他们不是包含与被包含的关系
只有局部变量存放在栈中,当方法结束的时候就被释放
在类中声明的变量,也就是类的成员变量是存放在堆中
局部变量:在方法中声明的变量