最近使用心得:
1)声明一个String类型的变量,首先会去常量池中查找是否存在,如果存在引用地址,如果不存在则再去开辟空间
2)栈中是以方法为单位入栈出栈的,首先进去的是main方法,几种数据类型的存储如下图所示。(注意:当main方法入栈后,其他方法入栈执行完毕后会出栈此时在方法中的变量随着消失
3)简单的说就是堆中存放的是对象,栈中的是引用
程序计数器是用于存放下一条指令所在单元的地址的地方
(下图是jdk1.8, jdk1.7中的永久代它存放的是应用中的类和方法,当永久代满了或者超过临界值,会触发Full GC,被元空间取而代之,它是与堆不相连的本地空间)
Java 中的堆也是 GC 收集垃圾的主要区域。GC 分为两种:Minor GC、FullGC ( 或称为 Major GC )。
Minor GC 是发生在新生代中的垃圾收集动作,所采用的是复制算法。
Full GC 是发生在老年代的垃圾收集动作,所采用的是标记-清除算法。
现实的生活中,老年代的人通常会比新生代的人"早死"。堆内存中的老年代(Old)不同于这个,老年代里面的对象
几乎个个都是在 Survivor 区域中熬过来的,它们是不会那么容易就 "死掉" 了的。因此,Full GC 发生的次数不
会有 Minor GC 那么频繁,并且做一次 Full GC 要比进行一次 Minor GC 的时间更长。
另外,标记-清除算法收集垃圾的时候会产生许多的内存碎片 ( 即不连续的内存空间 ),此后需要为较大的对象
分配内存空间时,若无法找到足够的连续的内存空间,就会提前触发一次 GC 的收集动作。