[Reading] Asking while Reading
Asking while Reading ——读Java垃圾收集器与内存分配策略 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。 为什么要了解垃圾回收? 当需要排查各种内存溢出、内存泄漏问题的时候,当垃圾回收成为了系统达到更高并行量的瓶颈的时候,我们就需要根据情况(往往是根据硬件和程序 以及它们在各种垃圾回收算法下运行的情况)选择恰当的垃圾回收方式,作出必要的监控和调节。 哪些内存需要回收? 换一句话来说:哪些内存可以回收,哪些内存又值得回收;可以回收明确我们的执行范围,而回收价值明确我们的主要目标,当然这不是一定的, 对每个项目都可能有不同的着眼点,这也是我们要理解垃圾回收方法与过程的原因。 Java堆和方法区与栈不同,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运 行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾回收器关注的是这部分内存。 方法区也需要回收吗? 方法区可以不回收,因为Java虚拟机规范中说过不要求虚拟机在方法区中实现垃圾收集,更重要的原因是其性价比一般较低,原因如下: 我们知道对方法区的收集集中在对常量、无用的类的收集。 1) 效率:常规一次垃圾收集可以回收70