Java内存的分派与办理是Java的焦点手艺之一 , 一般涉及以下区域:
1.栈区:由编译器主动分派释放 , 存放函数的参数值、局部变量的值等 。
2.堆区:由法式员分派释放 , 若是法式员不释放 , 法式竣事时可能由OS收受接管 。
3.文字常量区:存放常量字符串 , 法式竣事后由系统释放 。
4.法式代码区 :存放代码 。
5.全局区(静态区):全局变量和静态变量的存储在统一块区域 , 初始化的全局变量和静态变量在统一块区域 , 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域 。
文章插图
文章插图
需要这些哦
Java
方式/
11.栈
【java如何进行内存分配和管理】 是在函数中界说的一些根基类型的变量数据 , 还有对象的引用变量都在函数的栈内存平分配 。 当在一段代码中界说一个变量时 , Java就在栈中为这个变量分派内存空间 , 当该变量退出该感化域后 , java会主动释放失落为该变量分派的内存空间 。 栈内存是java法式的运行区 , 是在线程建立时建立的 。 它的生命周期跟从线程的生命周期 , 线程竣事栈内存也就释放 。 对于栈来说不存在垃圾收受接管的问题 , 只要线程竣事 , 该栈就竣事了 。
文章插图
22.堆
堆内存是用来存放由关头字new建立的对象和数组 。 在堆平分配的内存 , 由java虚拟机主动垃圾收集器来办理 。 在堆中建立一个对象后 , 还可以在栈中界说一个变量 , 让这个变量的值等于对象在堆内存中的首地址 , 栈中的变量就是对象的引用 , 半斤八两于java中的指针 。 当法式运行到对象地点的语句块之外 , 对象占有的内存不会主动释放 , 在没有引用变量指标的目的它时 , 随后一个不确定的时候被垃圾收集器收受接管失落 。
文章插图
33.常量池
常量池指的是在编译期被确定 , 并被保留在已编译的.class文件中的一些数据 。 除了包含代码中所界说的各类根基类型(int , long等)和对象型(string、数组等)的常量值(final) , 还包含一些以文本形式呈现的符号引用 。 在法式执行时 , 常量池会存储在MethodArea(方式区)中 , 而不是堆中 。 一个java虚拟机实例只存在一个堆内存 , 堆内存的大小是可以调节的 , 类加载器读取了类文件后 , 需要把类、方式、常变量(const润色的变量)放到堆内存中 , 堆内存分为三部门:永远存储区、新生区、老年区 。
文章插图
44.栈和堆的合作
栈的优势是存取速度比堆快 , 仅次于寄放器 , 错误谬误是栈中的数据大小与保存期必需是确定的 , 缺乏矫捷性 。 栈中存放一些根基类型的变量数据和对象引用 。 堆是一个运行时数据区 , 类的对象从平分配空间 , 堆的优势是可以动态地分派内存大小 , 保存期不必事先告诉编译器 , 错误谬误是因为在运行时动态分派内存 , 存取速度慢 。
推荐阅读
- Photoshop如何打马赛克
- Photoshop如何给哆啦A梦的皮肤更改颜色
- 360早间推荐 如何彻底删除360DayPop.exe
- 如何更换微信添加自己为好友的方式
- qq飞车手游怪兽怎么改装
- qq账户如何使用自助解冻功能
- 如何防止夏天中暑
- 如何在ppt中给图片添加简单框架白色样式
- 如何查询微信在手机占用的空间大小
- QQ如何通过通讯录发起QQ聊天