美文网首页
Java JVM and GC

Java JVM and GC

作者: qingshuiting | 来源:发表于2019-03-06 11:26 被阅读0次

    Java JVM and GC

    类加载

    方法区

    内容:类信息和类静态变量,常量池

    类信息:非常多

    主要使用的类信息:1. 类型的字段信息 2. 类型的方法信息

    Heap

    Java的对象和数组申请的空间都是从Heap中分配的。(引用是在栈中)

    所有的线程都是共享一个Heap的。

    Stack

    保存基本数据类型和自定义类型的引用。但是对于包装类型:Boolean,Long等存放于Heap中。

    每一个线程都有自己的stack。

    本地方法Stack

    用于存储本地方法的局部变量表,和JVM stack功能类似

    程序计数器

    每一个线程都有独立的程序计数器

    JVM 常量池

    存在在方法区中,存储的是常量的引用

    GC 内容

    Young generation

    新生代空间较小,被分为3个区域:Eden,From,To三个区域。

    创建的对象在Eden区,Eden区域GC后存活对象存放在幸存者空间(存放在同一个幸存者区间);当一个幸存者空间饱和,还存活的幸存者会被移动到另一个幸存者空间,然后清零另一个幸存者空间。如果被一定多次的对象,就会被移动到老年代。

    这里发生的GC 为Minor GC。

    Old generation

    大部分内容都是由于新生代移动过来的。

    这里发生的GC为Major GC或者Full GC。

    Permanent generation

    方法区,保存常量和字符串常量。

    GC 算法

    根搜索算法:

    类似一个图遍历,能够从root遍历到的节点就是不会被GC。

    标记清除算法:

    扫描,存活对象进行标记,不存活对象进行清理。

    会造成内存的碎片化。

    复制算法

    两个空间:活动区间 or 空闲区间

    把存活对应复制到空间区间中。一次性回收所有的活动区间中的内容。

    标记-整理算法

    类似于标记-清除,只是在清除不存活的对象以后,把存活对象进行移动,从而使得内存碎片化降低。

    算法的使用

    一般新生带使用 复制算法,老生带一般使用 标记-整理算法。

    相关文章

      网友评论

          本文标题:Java JVM and GC

          本文链接:https://www.haomeiwen.com/subject/hyaotqtx.html