java的内存空间分为:方法区,程序计数器,本地方法栈,虚拟机栈,堆;
方法区:方法区是系统分配的一个内存逻辑区域,有运行时常量池、静态变量、类信息;
注意:方法区里有个静态区,静态区专门存放静态变量和静态代码块。
虚拟机栈:虚拟机栈就是我们常说的栈空间了;
栈空间里存放的是局部变量表,动态链接,操作数栈,以及是方法的出口;每个栈帧都会随着方法的开始和结束相应的出栈和入 栈;
注意:1. 在方法中定义的一些基本类型的变量和引用变量都在方法的栈内存中分配。当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后(方法执行完成后),Java 会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作它用。
2. 若引用变量被释放,该变量对应的对象,也就失去了引用,也就变成了可以被gc对象回收的垃圾。
堆空间:堆空间里存放的有且只有对象,同时包括数组对象,该区域是垃圾回收的重点区域,垃圾回收也会回收方法区;
注意:对象是在堆内存中初始化的, 真正用来存储数据的。不能直接访问。
引用类型变量是保存在栈当中的,引用变量是一个用来引用堆中对象的符号而已(指针),使用时可以用它来代表引用对象;
程序计数器:分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
本地方法栈:本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则是为虚拟机使用到的Native方法服务。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。