java中对象和数组存放位置.pdfVIP

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java中对象和数组存放位置.pdf

java中的对象和数组都存放在堆中 java中的对象和数组都存放在堆中 内存分析图: 1.如何在内存中区分类和对象? 类是静态的概念. 位于代码区 对象是new出来的,位于堆内存,类的每个成员变量在在不同的对象中都有不同的值(除了静态变量 ),而方法只有一份,执行的时候才会占用内存. 2.同一类的每个对象共享该类的方法.非静态方法是针对每个对象进行调用. 3.用static声明的方法为静态方法。 在调用该方法时不会将对象的引用传递给它。 态成员. 4.Java中进行函数调用传递参数时。 遵循值传递的原则:基本类型传递的是该数据值本身.引用类型传递的是对对象的引用,而不是对象本 身. 下面为摘自网上的一段内存分析 1堆是一个运行时数据区。 类的对象从中分配空间。这些对象通过new建立,它们不需要程序代码来显式的释放。堆是由垃圾 回收来负责的. 堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器. 因为它是在运行时动态分配内存的。 赛惊艳上演引万人围观。但缺点是,由于要在运行时动态分配内存,学习郑州回收电脑欢迎您 回收内存条。存取速度较慢。java中的对象和数组都存放在堆中。 栈的优势是,存取速度比堆要快。 仅次于寄存器. 栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要 存放一些基本类型的变量(,看着回收芯片。int. short,long,byte. float,double. boolean. char)和对象引用。 2有一个很重要的特殊性. 就是存在栈中的数据可以共享。假设我们同时定义: 内存回收 inta=3;intb=3; 编译器先处理inta=3;首先它会在栈中创建一个变量为a的引用. 然后查找栈中是否有3这个值。 如果没找到. 就将3存放进来. 然后将a指向3。接着处理intb=3;在创建完b的引用变量后。 因为在栈中已经有3这个值. 便将b直接指向3。这样. 就出现了a与b同时均指向3的情况。这时. 如果再令a=4;那么编译器会重新搜索栈中是否有4值. 如果没有,则将4存放进来。 并令a指向4;如果已经有了。 种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不 会影响到b。 它是由编译器完成的。 它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态。 会影响到另一个对象引用变量。 java中的对象和数组都存放在堆中 回收内存条 ,1.垃圾收集算法的核心思想,,Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回 收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃 圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。,,垃圾收集算法的核心思 想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存 活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配。垃圾 收集算法的选择和垃圾收集系统参数的合理调节直接影响着系统性能,因此需要开发人员做比较深 用时间极短,所以对系统产生的影响不大。更值得关注的是主GC的触发条件,因为它对系统影响很明 显。总的来说,有两个条件会触发主GC:,,①当应用程序空闲时,即没有应用线程在运行时,GC会被调用 。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。 ,,②Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间 不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配 的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则JVM将报 ,而系统环境在不断的变化当中,所以主GC的运行具有不确定性,无法预计它何时必然出现,但可以确定 的是对一个长期运行的应用来说,其主GC是反复进行的。,,3.减少GC开销的措施,,根据上述GC的机 制,程序的运行会直接影响系统环境的变化,从而影响GC的触发。若不针对GC的特点进行设计和编码 ,就会出现内存驻留等一系列负面影响。为了避免这些影响,基本的原则就是尽可能地减少垃圾和减少 GC,虽然只是建议而非一定,但很多情况下它会触发主GC,从而增加主GC的频率,也即增加了间歇性停 顿的次数。,,(2)尽量减少临时对象的使用,,临时对象在跳出函数调用后,会成为垃圾,少用临时变量就 相当于减少了垃圾的产生,从而延长了出现上述第二个触发条件出现的时间,减少了

文档评论(0)

zhoubingchina + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档