(1)Java中的所有数据类型的大小是固定的。
(2)Java中的内存管理交给JVM。JVM会自动对内存进行开辟和释放。
(3)对象的回收是由垃圾回收器(GC)执行的。当堆内存的使用率超过70%时,会自动开启GC。栈内存是用完即释放,方法区是只进不出。
(4)堆中内存区的划分,主要划分为新生代区和老生代区。而新生代区又被划分为伊甸园区和to区以及from区。
其中,新生代区与老生代区占比为1:2
伊甸园区:to区:from区 = 8 :1 :1
对象存放到堆中的过程
当创建一个对象时,先将对象存入新生代的伊甸园区,会经历一次扫描,扫描后如果对象依然存在,那么会将对象挪入幸存区。
在幸存区又经历多次扫描(大概是15次左右),如果对象依然存在,那么会从新生代挪入老生代,老生代的扫描频率远远低于新
生代。
如果存入的对象占用内存过于膨大的话,jvm是如何工作的
先尝试将对象存入伊甸园区,如果放不下,那么就会扫描新生代(伊甸园、to、from区),经历第一次的初代回收,然后再次尝
试将对象存入,如果还是放不下,那么再扫描一次新生代,经历第二次的初代回收,如果还是放不下,那么会扫描老生代,经历
第一次完全回收,如果放不下,再次扫描新生代,经历第三次的初代回收,如果放不下,那么扫描老生代,经历第二次的完全回
收,如果还是放不下,那么抛出错误,程序停止。
三次初代回收,两次完全回收