Java内存区域

运行时数据区:

  1. 程序计数器:当前线程所执行的字节码的行号指示器,如果正在执行的是Native方法,这个计数器值则为空。
  2. Java虚拟机栈:用于存储局部变量表(基本数据类型、对象引用和returnAddress类型)、操作数栈、动态链接、方法出口等信息,是线程私有的,它的生命周期与线程相同。
  3. 本地方法栈:Native方法服务
  4. Java堆:内存最大的一块,被所有线程共享的一块内存区域,所有的对象实例和数组都要在堆上分配。
  5. 方法区:被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
  6. 运行时常量池(方法区的一部分):存放编译期生成的各种字面量和符号引用:String类的intern()方法。具有动态性。

判断对象已死:

  1. 引用计数算法
  2. 根搜索算法:“GC Roots”,引用链

引用:

  1. Strong Reference 强引用
  2. Soft Reference 软引用
  3. WeakReference 弱引用:只能生存到下一次垃圾收集发生之前
  4. 虚引用:PhantomReference

垃圾收集算法

  1. 标记-清除算法:标记和清除的效率都不高,标记清除之后会产生大量不连续的内存碎片。
  2. 复制算法:新生代:将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中的一块Survivor,用老年代分配担保。

        老年代:标记整理算法

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。