当前位置: 首页 > news >正文

中国建设银行广西分行网站首页福州网站制作外包

中国建设银行广西分行网站首页,福州网站制作外包,重庆市建设工程信息网质量监督,深圳建设培训中心网站在JAVA中,有六个不同的地方可以存储数据: 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆&…

在JAVA中,有六个不同的地方可以存储数据:

1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
3. 堆:存放所有new出来的对象。
4. 静态域:存放静态成员(static定义的)
5. 常量池:存放字符串常量和基本类型常量(publicstatic final)。
6. 非RAM存储:硬盘等永久存储空间

这里我们主要关心栈、堆,对于 栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定 ,具有很大的灵活性。
对于字符串:其对象的引用都是存储在栈中的,如果是 编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中 。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

newString(“China”);
对于通过new产生一个字符串 (假设为”china”)时,会先去常量池中查找是否已经有了”china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。这也就是有道面试题:Strings = new String(“xyz”);产生几个对象?一个或两个,如果常量池中原来没有”xyz”,就是两个。

局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。(形式参数是局部变量)
成员变量存储在堆中的对象里面,由垃圾回收器负责回收

Java内存分配中的栈

在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java在栈中为这个变量分配内存空间,当该变量退出其作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义: int a =3; int b = 3; 编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响 到b的值。要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b, 它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。

什么是引用变量
引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。

回过头再来看代码

实际上里面分解成了四个步骤。

Case cc; '''在栈内存里面开辟了空间给引用变量cc,这时cc=null'''
cc=new Case();
'''
1. new Case()在堆内存里面开辟了空间给Case类的对象,这个对象没有名字
2. Case()随即调用了Case类的构造函数
3. 把对象的地址在堆内存的地址给引用变量cc

这样我们就明确了:
Java中,这里的“=”并不是赋值的意思,而是把对象的地址传递给变量;
对象创建出来,其实连名字都没有,因此必须通过引用变量来对其进行操作。

Java内存分配中的堆

堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。 引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。这也是 Java 比较占内存的原因。堆的优势是可以动态地分配内存 大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

实际上,栈中的变量指向堆内存中的变量,这就是Java中的指针!

http://www.yayakq.cn/news/897838/

相关文章:

  • 安康网站建设技巧市住房和城乡建设局
  • 深圳专门做网站php mysql网站开发试题a
  • 做爰全过程的视频的网站网页编辑器手机版
  • wordpress分类目录是哪个文件合肥seo代理商
  • 网站域名自己做深圳电力建设公司网站
  • 网站开发工程师代码网站会员系统功能
  • 网站制作源码定制软件开发公司哪家好
  • wordpress全站背景女的和女的做那个视频网站
  • 平面设计相关的网站有哪些内容三d全景网站建设
  • 长沙智能建站模板公关策划书模板范文
  • 网站目录生成做一个小程序要多少钱
  • 昆明网站seo外包做网站无需备案
  • ps 矢量素材网站唐山网站建设怎么样
  • 深圳网站建设商家三星做号网站
  • 厦门网站建设电话济南本地网站建设公司
  • 手机参数查询网站百度推广需要手机网站
  • 营销型网站建设公司网站建设需要要多少钱
  • 建站好用的软件网址导航哪个好
  • 网站建设基本功能网页制作与网站建设课堂实录
  • 有人用我的企业做网站国内新闻热点事件
  • 湖南省邵阳市建设局网站网站开发大学
  • 专业定制网站建设网站页面优化包括
  • 的网站制作163网易企业邮箱
  • 做网站赚钱什么类型兰州网站排名分析
  • 广告网站建设网手机网站制作方法
  • 昆明做网站开发维护的公司深圳做app网站建设
  • 有哪些网站可以做青旅义工网站框架
  • 网站内容全屏截屏怎么做单页网站后台
  • 网站怎么做网站收录在哪里建网站好
  • 外管局网站先支后收怎么做报告软件技术和软件工程有什么区别