JMM

作者: 红烧鸡翅膀_我喜欢吃 | 来源:发表于2020-03-18 11:39 被阅读0次

    总体=PC计数器+jvm线程栈+本地调用栈+堆+元数据区

    默认堆=最大堆=机器内存的2/3或者一半

    堆=年轻代+年老代         【1:2】

    年轻代=eden区+幸存1+幸存2 [8:1:1]

    --------------------------------

    GC

    年轻代:youngGC,对于算法:串行、parNew、G1

    年老代:fullGC,对于算法:串行、CMS、G1

    -------------------------------

    一般分配原则:

    堆:对象实例

    栈:对象引用和局部变量

    元数据:类(字节流加载转换成的数据结构)、常量、静态变量

    JIT优化分配原则:

    .java-------->.class------>二进制 ---解释性语言

    热点代码【hot spot code】,对于重复执行的代码,jvm会对它进行缓存成二进制指令,不用每次都去边执行边翻译,提高性能,成为JIT技术。此技术利用计数器来统计执行次数,次数达到阈值则缓存。

    优化方法:标量替换、锁消除、锁膨胀、方法内联、空值检查、类型检查消除、公共子表达式消除,主要就是能省略的都减少。

    逃逸分析:一个方法内的对象,在方法内实例化,参数和返回均不涉及该对象,则该对象没有逃逸。

    标量替换:jvm优化,一个对象所有成员变量都是值类型 则可以进行将其对象成员分配在栈上从而取代在堆上分配。

    (对象会被jvm优化[大部分,不是所有的对象都要替换])标量替换的条件=不逃逸+可替换

    替换后分配原则与一般的不同,较特殊。

    相关文章

      网友评论

          本文标题:JMM

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