美文网首页
深入理解java虚拟机

深入理解java虚拟机

作者: sunshaohua520 | 来源:发表于2018-04-29 09:44 被阅读0次

    一 java内存区域与内存溢出

    程序计数器:当前线程执行行号,线程私有

    虚拟机栈:存储局部变量表(基本类型和对象引用)、操作栈、动态链接等

    本地方法栈:为虚拟机使用到的本地方法(Native)服务

    堆:对象实例,GC主要活动区域

    方法区:存储被加载的类的信息、常量、静态变量、即时编译后的代码等

    运行时常量池:存储编译器产生的字面量和符号引用,也可能是运行时产生的常量,如string的intern()

    对象访问:主流两种方式:句柄,直接指针,句柄优点:对象移动时直接修改引用,直接指针优点:访问速度快,sun hotspot 采用直接指针

    异常:堆溢出异常 java heap space   栈溢出 stackOverflowError  方法去溢出(含常量池溢出)PermGen space

    二垃圾收集器与内存分配策略

    对象死的标准:引用计数法、可达性分析法

    再谈引用:强引用:引用关系一直存在,不gc, 软引用:下次溢出之前gc ,弱引用:下次gc时gc ,虚引用:设置的目的是希望gc时收到系统通知

    垃圾收集算法:标记-清除法 缺点:空间问题、产生大量不连续碎片。效率低。复制算法:空间分相等两块,其中一块满即将存活对象复制另一块,再清除。标记整理法:和标记清除一样,不同是将存活对象移至另一端,清除以外内存。

    分代收集:新生代 老生代:堆分为新生代老生代 比例1:2,新生代又分为eden和2个survivor 比例为8:1:1,新生代采用复制算法,将eden和其中一个survivor(from)存活对象移至另一个survivor(to),每次to,对象加1,超过设置(默认15 可通过-XX:MaxTenuringThreshold设定)移到老年代,老年代采用标记算法

    垃圾收集器:

        serial收集器,单线程扫描,适用于单cpu新生代空间小、暂停要求不高

        parNew收集器:多线程收集,适用于多CPU、对暂停时间要求较短的应用上,是server级别默认采用的GC方式

        parallel Scanvenge收集器:新生代收集器使用复制算法并行收集,高吞吐量,适用于后台运算不需要太多交互

        serial old 收集器:

        parallel old 收集器:

        cms收集器:以获取最短停留时间,基于标记清除

    未完待续

    相关文章

      网友评论

          本文标题:深入理解java虚拟机

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