Java中数据是如何存储

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一:JAVA中数据的存储方式

①:寄存器:这是最快的存储区,因为它位于不同于其他存储区的地方———处理器内部。但是寄存器的数量极其有限,所以寄存器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。

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

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

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

⑤非RAM存储:如果数据完全存活在程序之外,那么他可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是流对象和持久化对象。在流对象中,对象转化成字节流,通常被发送到另外一台机器上。在持久化对象中,对方被放在磁盘上,因此,即使程序终止,他们仍可以保持自己的状态。这种存储方式在于:把对象转化成可以存放早其他媒介上的事物,在需要时,可恢复成常规的,基于RAM对象。Java提供了对轻量级持久化的支持。

 

1.存储数据类型:栈内存中存放局部变量(基本数据类型和对象引用),而堆内存用于存放对象(实体)。

2.存储速度:就存储速度而言,栈内存的存储分配与清理速度更快于堆,并且栈内存的存储速度仅次于直接位于处理器当中的寄存器。

3.灵活性:就灵活性而言,由于栈内存与堆内存存储机制的不同,堆内存灵活性更优于栈内存。

这样两种存储方式的不同之处,也是由于它们自身的存储机制所造成的。所以为了理解它们,首先我们应该弄清楚它们分别的存储原理和机制,在Java中:

— 栈内存被要求存放在其中的数据的大小、生命周期必须是已经确定的;

— 堆内存可以被虚拟机动态的分配内存大小,无需事先告诉编译器的数据的大小、生命周期等相关信息。

转载于:https://my.oschina.net/mujourney/blog/681264

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之Lollipop DevicePolicyManager学习(下)

转载:http://blog.csdn.net/guiyu_1985/article/details/42968781 3. 如何在主账户与被管理者账户之间做数据通信。 a) 什么是userID 刚才提到,Lollipop用来区分主账户与被管理账户的其实是一个int型数值userID。 从UserHandler.class可…

详解:从Greenplum、Hadoop到现在的阿里大数据技术

对于企业来说,但是到底云计算是什么呢?相信很多企业都有这样的困惑,让我们一起回到这个原始的起点探讨究竟什么是云计算?云计算对于企业而言到底意味什么?云计算的三条发展路径及三种落地形态 当回到最初的起点再审视云…

技术分享 | 【构建服务端SDK】之连接中心统一调用SDK

源宝导读:微服务架构与传统的单体式方案的最大不同是微服务将应用的核心功能拆分成多项服务。每项服务可以单独构建和部署。服务之间需要互相通信。假设服务间每次通信都需要在调用方编码操作,那么必定会增加很大的工作量,并且造成代码冗余并…

Tcp连接的七次握手浅析

连接的三次握手 客户端向服务器发送SYN请求 服务器发送ACK回应请求,并同时发送一个SYN的请求给客户端 客户端回应ACK应答 关闭的四次握手 对于关闭流程,一共有三种情况:客户端主动关闭,服务器端主动关闭,客户端和服务器…

VS2022安装教程和使用说明来了

我看很多小伙伴已经开始迫不及待的安装VS2022了,虽然我也安装了VS2022,但是我依旧使用VS2019。因为我觉得适合我的才是最好的,并非是最新的,所以大家在使用的时候,根据实际需求选择开发工具,不要一味追求最…

华为交换机RRPP配置实验

在工作中遇到了H3C和HW的RRPP配置,以下就以华为模拟器再作一次实验。大家共同来论讨论遇到的问题。 【理论基础】RRPP具体的理论见配置手册下面只点几个容易出错的地方1、作为RRPP环的接口要关闭STP2、两个重要的命令:control-vlan vlan-id命令&#xff…

Android之AIDL服务

AIDL服务 服务(Service)是android系统中非常重要的组件。Service可以脱离应用程序运行。也就是说,应用程序只起到一个启动Service的作用。一但Service被启动,就算应用程序关闭,Service仍然会在后台运行。 andro…

男人的那些统一话术......

1 当面试官来租你的房子▼2 好家伙(via.dy油画艺术)▼3 学到了(素材来源网络,侵删)▼4 一杯奶茶能加多少料▼5 原来我们如此优秀!(素材来源网络,侵删)▼6 幼儿园里卧…

后端开发者开发前端必会的工具(一):样式调试篇

又来为大家分享干货了,今天主要是分享一点关于后端工程师开发前端比较苦恼的一个问题《如何去调试前端?》,我相信这是所有后端开发者比较困惑的,如果有这个困惑的,记得关注“程序员晓晓”公众号,并给我留言…

adb android源码分析,Android源码分析(十六)----adb shell 命令进行OTA升级

一: 进入shell命令界面adb shell二:创建目录/cache/recoverymkdir /cache/recovery 如果系统中已有此目录,则会提示已存在。三: 修改文件夹权限chmod -R 777 /cache/recovery四: 把ota文件路径写入/cache/recovery/command文件中echo "--update_pac…

如何使用cURL获得请求和响应时间?

✎ 码甲说 hello,老伙计们,又有半个多月没见了,今天给大家分享一个干货编程小技巧,上至架构师、下至开发者、运维男、QA, 得此利器,事半功倍。cURL在我的眼里,就是一个httpClient手办&#xff…

ASP.NET MVC CheckBoxFor为什么会生成hidden input控件

自己开发的公众号&#xff0c;可以领取淘宝内部优惠券 Html.CheckBoxFor(m > m.Bool) 使用CheckBoxFor方法得到的html代码会是下面这个样子 <input checked"checked" data-val"true" data-val-required"Bool 字段是必需的。" id"Bool…

android 远程调试工具,Android远程调试的探索与实现

文章来源&#xff1a;美团点评技术团队作为移动开发者&#xff0c;最头疼的莫过于遇到产品上线以后出现了bug&#xff0c;但是本地开发环境又无法复现的情况。常见的调查线上棘手问题方式大概如下&#xff1a;方法优点缺点联系用户安装已添加测试日志的APK方便定位问题需要用户…

.NET 6新特性试用 | 自动生成高性能日志记录代码

前言要想记录日志&#xff0c;常用的方式是访问ILogger实例提供的日志记录方法&#xff1a;private readonly ILogger<WeatherForecastController> _logger;public WeatherForecastController(ILogger<WeatherForecastController> logger) {_logger logger; }[Htt…

3150 Pibonacci数 - Wikioi

题目描述 Description   你可能听说过的Fibonacci数和圆周率Pi。   如果你让这两个概念合并&#xff0c;一个新的深奥的概念应运而生&#xff1a;Pibonacci数。   这些数可以被定义为对于x>0&#xff1a;     如果0<x<4&#xff0c;则P(x) 1 …