IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【java】对象的存储位置 -> 正文阅读

[Java知识库]【java】对象的存储位置

创建对象

拥有一个引用,并不一定需要有一个对象与他关联。因此,如果想要操作一个词或句子,则可以创建一个String引用:

String s;
//创建一个引用,但是这里所创建的只是一个引用,并不是*对象*。
// 如果此时 向s发送一个消息,就会返回一个运行时错误。
// 这是因为:此时s并没有与任何事物相关联,因此
// 一种安全的做法是:
//     创建一个引用的同时便进行初始化。

一旦创建了一个引用,就希望它能与一个新的对象相关联。通常用new关键字。创建一个新的对象

     String s= new String("asdf")

创建的对象存储在什么地方?

  1. 寄存器 这是最快的的存储区,因为它位于不同与其他存储区的地方 ---- 处理器内部 但是寄存器的数量极其有限,所以寄存器根据需求进行分配。不能直接操作
  2. 堆栈 位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放内存,这是一种快速有效的分配存储方法,仅此于寄存器,创建程序时,java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些java数据存储于堆栈中 ---- 特别是对象引用,但是java对象并不存储在这里
  3. 一种通用的内存池(也位于RAM区),用于存放所有的Java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆的存活时长,因此在堆中分配存储有很大的灵活性;当然,这一灵活性必须付出相应的代价:用堆进行存储分配和清理可能比用堆栈需要更多时间
  4. 常量存储 常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分隔离开,所有这种情况可以将它存放在ROM(只读存储器)中【这种存储区的一个例子:字符串池。所有字面常量字符串和具有字符串值的常量表达式都自动是内存限定的,并且会置于特殊的静态存储区中】;
  5. 非RAM存储 其中两个基本的例子是 流对象 和 持久化对象 ,在流对象中,对象转化为字节流,通常被发送给另一台机器。在"持久化对象" 中,对象被存放在磁盘上,因此,即使程序终止,它们仍可以保持自己的状态。这种存储方式的技巧在于:把对象转化为可以存放在其他媒介上的事物,在需要时,可恢复成常规的、基于RAM的对象

例如:String的常见面试题

String str="i"与 String str=new String(“i”)一样吗?
不一样,因为内存的分配方式不一样。

  1. String str="i"的方式,java 虚拟机会将其分配到常量池中;
  2. 而 String str=new String(“i”) 则会被分到堆内存中;

String s = new String(“xyz”);创建了几个String Object?
分两种情况:

  1. 如果String常量池中,已经创建"xyz",则不会继续创建,此时只创建了一个对象new String(“xyz”),此时为一个Object对象;
  2. 如果String常量池中,没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",一个对象new String(“xyz”),此时为二个Object对象
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:12:16  更:2021-11-22 12:13:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:02:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码