对象存储位置

程序运行时,对象是怎么放置安排的呢?特别是内存是怎样分配的呢?有五个不同的地方可以存储数据:

1.寄存器

寄存器是最快的存储区,位于处理器内部。但是寄存器的数量极其有限,所以寄存器根据需求进行分配。人为不可控制,也不能在程序中感觉到寄存器存在的任何迹象。

2.堆栈

堆栈位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速的分配存储方法,仅次于寄存器。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束了程序的灵活性,所以虽然某些Java数据存储于堆栈中——特别是对象引用,但是Java对象并不存储于其中。

3.堆

堆是一种通用的内存池(也位于RAM区),用于存放所有的Java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当需要一个对象时,只需用new写一行代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须付出代价:用堆进行分配和清理可能比用堆栈进行存储分配需要更多的时间。

4.常量存储

常量值通常直接存储在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分隔离开,所以在这种情况下,可以选择将其存放在ROM中(只读存储器)。

5.非RAM存储

如果数据完全存活于程序外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个最基本的例子是流对象和持久化对象。在流对象中,对象转化成字节流,通常被发送给另一台机器。在持久化对象中,对象被存储于磁盘中,在程序需要时,可恢复成常规的,基于RAM的对象(例如JDBC和Hibernate)。

java 对象存储在哪里_Java对象存储位置相关推荐

  1. java中存在对多个对象加锁的情况_Java对象锁和类锁全面解析(多线程synchronized关键字)...

    最近工作有用到一些多线程的东西,之前吧,有用到synchronized同步块,不过是别人怎么用就跟着用,并没有搞清楚锁的概念.最近也是遇到一些问题,不搞清楚锁的概念,很容易碰壁,甚至有些时候自己连用没 ...

  2. java的头怎么写_JAVA对象布局之对象头(Object Header)

    由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能 .在学习并发编程知识synchronized时,我们总是难以理解其实 ...

  3. java对象什么时候回收_Java对象的生命周期与垃圾回收以及四种引用

    创建对象的方式用new语句创建对象. 使用反射,调用java.lang.Class或java.lang.reflect.Constructor的newInstance()实例方法. 调用对象的clon ...

  4. java对象的内存结构_Java对象在内存中的结构分析

    问题:在Hotspot JVM中,32位机器下,Integer对象的大小是int的几倍? HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头.实例数据和对齐填充,其中对象头又分为:Mark ...

  5. java 对象池 博客_Java对象池技术的原理及其实现的小结

    一起学习 Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 T2 T3.其中T1表示对象的创建时间,T2表示对象的 ...

  6. java对象克隆的例子_Java对象克隆

    本篇文章帮大家学习java对象克隆,包含了Java对象克隆使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. Java不提供克隆(复制)对象的自动机制.克隆对象意味着逐位复制 ...

  7. java对象的内存结构_JAVA 对象内存结构

    JAVA对象内存结构 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 对象头 markWo ...

  8. java面向对象计算器怎么写_Java对象简单实用案例之计算器实现代码

    对 Java中的对象与属性,方法的使用,简单写了个案例 import java.util.Scanner; class Calculste { int a; //定义两个整数 int b; Strin ...

  9. java创建变量的过程_java 对象的创建过程

    初始化的顺序首先是static(如果它们尚未由前一次对象创建初始化,也就是new对象的时候,只执行一次static变量初始化),变量初始化顺序有变量在类的定义顺序决定的: 对象的创建过程,以Dog类为 ...

  10. java 对象引用 弱引用吗_Java对象的强引用、软引用、弱引用和虚引用 笔记

    从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用 使用最普遍的引用.如果一个对象具有强 ...

最新文章

  1. python可视化案例书籍推荐_这5款Python可视化神器,总有一款适合你!
  2. python dpkt解析ssl流
  3. template与图片懒加载
  4. Ubuntu使用——23(dock的美化)
  5. Pygame介绍以及下载
  6. Android开发之旅:android架构
  7. GraphQL入门之工程搭建
  8. 九点标定进行仿射变换halcon仿真代码
  9. 单元测试 | 如何在Mock时匹配匿名类型参数
  10. 杨潮观《偷桃捉住东方朔》
  11. debian-nagios3.2,linux+apache+mysql+php
  12. 10- monkey日志分析
  13. c语言学号信息管理系统,c语言学籍信息管理系统设计
  14. 机器学习:使用梯度下降实现逻辑回归求解多元分类问题的原理
  15. GB28181标准文档以及GB35114标准文档免费下载
  16. FPGA视频处理系统
  17. vue读取服务器文件,vue读取txt文件
  18. ARPG游戏中怪物AI实现
  19. 生活随记 - 拥抱变化
  20. matlab函数 bsxfun(高效代码)

热门文章

  1. 首席新媒体运营商学院创始人黎想:给新媒体运营的7点建议
  2. MySQL数据库(一)服务器数据库的搭建和远程访问
  3. Dedecms错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错怎么解决?
  4. Ubuntu18.04出现无WIFI适配器解决方法汇总
  5. 3DEXPERIENCE ENOVIA
  6. python爬取招聘网信息并保存为csv文件
  7. OpenCV3学习笔记(1)- OpenCV安装配置、基本架构、使用CMake编译OpenCV源代码
  8. SFB 项目经验-11-为某上市企业的Skype for Business规划与实施
  9. origin三图合一_神教程:Origin也能玩转图片拼接组合排版
  10. Java编程思想-并发(5)