基础数据类型:boolean、char、byte、double、float、int、long、short
引用类型:类、接口、数组
早都应该写了!!!
我们平时口头上说的就是 堆、栈、方法区,下面先解释一下这三个:
1、栈:
这个栈就是我们平时说的栈,全名是:虚拟机栈
》1、栈中只保存基础数据类型数据的对象和自定义对象的引用(地址),而实例对象都存储在堆中。
》2、一条线程包含一个栈,所以栈是私有的,所有的数据(基础类型和对象引用)都不能被其他栈访问。
》3、生命周期和线程一致
2、堆:
》1:、存放所有的实例对象,以及数组对象。
》2、在整个jvm中只有一个堆,被所有的线程共享。
3、方法区:
》1、方法区也叫静态区,存放了要加载的类的信息,包含class、static变量、常量等
》2、方法区中包含的,都是整个jvm中唯一的元素,如final定义的
》3、运行时候的常量池也存放在方法区中
以上就是我们经常说的jvm内存,而实际上还有两个:本地方法栈和程序计数器
4、本地方法栈:
》用于支持native方法的执行, 存储了native方法的执行状态
native方法:与硬件交互的方法
5、程序计数器:
》通过计数器的值,来获取下一条指令的地址
》如果程序在执行java方法的时候,计数器记录的是正在执行的虚拟机字节码指令地址,
如果执行的是native方法,值是undefined
并且,由于计数器的内存不会随着程序的运行而改变,因此计数器是内存区唯一不会发生内存泄漏的(outofmemory)