总体=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优化[大部分,不是所有的对象都要替换])标量替换的条件=不逃逸+可替换
替换后分配原则与一般的不同,较特殊。
网友评论