当前位置:   article > 正文

java中堆内存结构_java堆内存包含哪些

java堆内存包含哪些

java内存结构:

java内存主要可分为程序计数器、堆、jvm栈、本地方法栈、方法区
程序计数器PC: 线程私有,指向需要执行的下一条指令的位置。
堆: 存放对象实例。
jvm栈: 基础数据类型和引用类型。
本地方法栈: 存放本地方法。
方法区: 线程共享,存储类加载的信息、常量、静态变量。

java堆内存是所有线程所共享的,堆内存可分为新生代和老生代,而新生代又可分为一个Eden区和两个Survival区,这两个Survival区分别为Survival_from和Survival_to,这两个survival区轮流做survival_from和survival_to。而类的静态变量不用使用对象就可以直接调用的,会被放入永生代。

新生代中常用的垃圾收集算法为minorGC,假设这两个survival区分别标号为S0和S1,当Eden区第一次满了之后,jvm执行minorGC将Eden中仍就存活的对象放入S0中;当Eden区第二次满了,jvm继续执行minorGC将Eden中仍就存货的对象放入S1中,另外也需要将S0中仍就存活的对象放入S1中,也就是说此时S0为survival_from,S1为survival_to。下一次时S1是survival_from,而S0是survival_to。如此循环往复。

而老生代中存放的主要是已经存活了很久的对象。

垃圾回收算法: 标记-清除算法 复制算法 标记整理算法 分代收集算法

  1. 标记-清除算法:两次遍历内存,第一次标记需要回收的对象(标记),第二次回收标记过的内存 (清除)。两次遍历效率较低,且容易产生内存碎片。
  2. 复制算法(minorGC):解决了碎片化,效率高。但需要分出一部分内存做复制。
  3. 标记整理算法 :类似于利用紧凑,将需要回收的对象标记后,把存活的对象往内存某一端移动。
  4. 分代收集算法:老生代和新生代,设定过期时间,过期后回收。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/1002368
推荐阅读
相关标签
  

闽ICP备14008679号