学习笔记
标签(空格分隔): JVM Spring
为什么JVM实际使用的内存比-Xmx指定的内存要小?
——因为有时候一块Survior区域是不会计算到可用内存区域中的,也就是说除了用G1回收算法,其他的回收算法都会出现类似的情况。
一篇内存分析的实战
并发环境下的HashMap引起的Full GC排查
主要分析堆快照、内存快照和线程信息以及GC日志的查看
阿里的JVM:在Full GC不能回收的情况下,会把当前分配的最大内存的线程信息和分配内存信息打印出来,这个很适合用来做分析。
这篇文章的问题总结:多线程下对HashMap的put操作会导致内部的Entry链表形成环形数据结构。这一部分还需要看CoreJava,后面补充
最后的解决方案也不是很明白。
G1收集器的补充
它与CMS收集器很类似,但是有一个区别:CMS收集器是不做内存整理的。G1的目的是为了那些需要大容量内存和较小GC延迟的应用程序提供解决方案,一般是指堆大小设置为6G以上,预测暂停时间为0.5秒内的应用程序。
从CMS->G1可以从以下几个角度去考虑:
- 活动对象占据了超过50%的Java堆空间
- 对象分配率或者提升率明显波动
- 不希望有长时间的垃圾收集暂停时间(超过0.5或1秒)
为什么使用Spring?
Spring的核心思想是低内聚松耦合
- 基于POJO的轻量级和最小侵入编程
- 通过依赖注入和接口实现松耦合
- 基于切面和惯例进行声明式编程
- 通过切面和模板减少样板式代码