(1) 寄存器(register)。这是最快的保存区域,这是主要由于它位于处理器内部。然而,寄存器的数量十分有限,所以寄存器是需要由编译器分配的。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。
(2) 堆栈(stack)。位于通用RAM(随机访问存储器)中。可通过它的“堆栈指针” 获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间” 。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java 数据要保存在堆栈里— — 特别是对象句柄(也称对象的引用),但Java对象并不放到其中。
(3) 堆(heap)。一种通用性的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同的是,“内存堆”或“堆”(Heap )最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new 命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价。在堆里分配存储空间时会花掉更长的时间!
(4) 静态存储(static storage)。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM 里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java 对象本身永远都不会置入静态存储空间。
(5) 常数存储(constant storage)。常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。
(6) 非RAM 存储(non-storage-RAM)。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“ 流式对象”和“固定对象” 。对于流式对象,对象会变成字节流,通常会发给另一台机器。而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技巧就是它们能存在于其他媒体中。一旦需要,甚至能将它们恢复成普通的、基于RAM的对象。Java 1.1提供了对轻量级持久化(Lightweight persistence)的支持。未来的版本甚至可能提供更完整的方案。

转载于:https://www.cnblogs.com/chengJAVA/p/3300041.html

java对象的内存分配相关推荐

  1. 独占设备的分配与回收_灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?...

    点击上方"linkoffer", 选择关注公众号高薪职位第一时间送达 作者 l Hollis JVM内存结构,是很重要的知识,相信每一个静心准备过面试的程序员都可以清楚的把堆.栈. ...

  2. 原创 | 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 222 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) JVM内存结构,是很 ...

  3. java对象的内存分配流程

    了解对象的内存分配流程对常见内存溢出问题.jvm优化有很大作用. 内存分配原则 对象栈内分配 通常理解new对象都在堆中分配存储空间,但是当(通过逃逸分析 确定)对象仅在方法内使用而未被外部访问的时候 ...

  4. 源码分析:Java对象的内存分配

    Java对象的分配,根据其过程,将其分为快速分配和慢速分配两种形式,其中快速分配使用无锁的指针碰撞技术在新生代的Eden区上进行分配,而慢速分配根据堆的实现方式.GC的实现方式.代的实现方式不同而具有 ...

  5. jvm学习笔记(3)——java对象的内存分配和对象的回收(GC)

    引言: 之前的文章已经提过,java对象实例是存放在堆上的,至于是在伊甸区.存活区还是老年区,这些都是从对象回收(GC)角度来进行的逻辑划分.所以我们先说对象的回收(GC),然后再依据GC的策略来说明 ...

  6. java对象的内存分配_java对象在内存的分配问题

    今天看到一个不错的PPT:Build Memory-efficient Java Applications,开篇便提出了一个问题,在Hotspot JVM中,32位机器下,Integer对象的大小是i ...

  7. 对象创建方法,对象的内存分配,对象的访问定位

    对象创建方法: JVM遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.连接和初始化过. 如果没有,那必须先执行相应的类的加 ...

  8. Java 对象占用内存大小

    Java 对象 如果想要了解java对象在内存中的大小,必须先要了解java对象的结构. HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instan ...

  9. java 线程 内存分配内存_漫谈JAVA语言的内存分配

    在说JAVA语言的内存分配之前,我们先聊聊OS的Memory Management,这是学习操作系统课程的一个重要内容.从这里开始理解内存分配有利于理解的更深入. 我们知道物理内存是由page 和se ...

最新文章

  1. 网站发送邮件的邮箱服务器,教各位站长配置邮箱让网站能够发送Email邮件
  2. mysql数据库的分离_数据库分离和附加 (SQL Server)
  3. ASP.NET Core在 .NET Core 3.1 Preview 1中的更新
  4. 【渝粤题库】国家开放大学2021春3907安全原理题目
  5. bba70_BBA的完整形式是什么?
  6. Android逆向笔记-破解自己编写的Android应用程序(开发及破解)
  7. SpringBoot项目如何进行打包部署
  8. delphi 登录界面 主窗体 切换_Python GUI项目实战(二)主窗体的界面设计与实现
  9. Java代码实现“年-月-日 上午/下午时:分:秒”
  10. 关于前端的margin
  11. 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——2.6节TCP/IP协议栈
  12. HomeBrew加速
  13. wav转换mp3简单图文教程
  14. 软件测试ios打包,苹果测试iOS打包成 ipa包
  15. Android学习笔记 二八 字体
  16. Google的愚人节
  17. 联想集团ESG与社会价值论坛召开,首次发布《联想集团2022社会价值报告》
  18. gps和惯性组合matlab程序,北航卡尔曼滤波与组合导航 第三次作业 SINS/GPS组合动态实验...
  19. 数人云|PaaS Innovation 2017开幕在即,共襄技术演进与商业碰撞盛宴
  20. java swing 简单计算器_用java swing编写一个简单的计算器

热门文章

  1. [转]IE下对文件(图片)进行base64转换
  2. 《那些年啊,那些事——一个程序员的奋斗史》——74
  3. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数
  4. CF223C【Partial Sums】(组合数学+乱搞)
  5. [UWP]了解IValueConverter
  6. java:BufferedReader接受输入进来的2个数字,并将它们相加
  7. iOS开发日记1-tableview编辑
  8. 【转】PhpStorm 提交代码到远程GitHub仓库
  9. T-SQL查询进阶--深入理解子查询
  10. 8.继续分析一破解加密码获取-最最最简单的注册机