Java中的垃圾回收器几乎是面试中的必考点,无论是面试初级,中级还是高级,总免不了要问一问垃圾回收器的一些知识点。不管在实际开发中你使用程度怎么样,为了面试不被压价,还是非常有必要对它做一个较深入的理解。
本篇对JVM中常用的几种垃圾回收器的主要特点,使用场景及优化建议做一个简单介绍,希望起到抛砖引玉的效果,对你入门有所帮助。
新生代回收器
老年代回收器
新生代和老年代回收器
Serial收集器是最基本、发展 历史 最悠久的收集器。JDK131前是HotSpot新生代收集的唯一选择。
运行示意图
有如下特点:
简单高效,由于采用的是单线程的方法,因此与其他类型的收集器相比,对单个cpu来说没有了上下文之间的的切换,效率比较高。
会在用户不知道的情况下停止所有工作线程。
在用户的桌面应用场景中,可用内存一般不大,可以在较短时间内完成垃圾收集,只要不频繁发生,这是可以接受的
对于限定单个CPU的环境来说,Serial收集器没有线程切换开销,可以获得最高的单线程收集效率
ParNew收集器其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾收集之外,其余均和Serial 收集器一致。
运行示意图
多线程版本的Serial,可以更加有效地利用系统资源
同Serial,会在用户不知道的情况下停止所有工作线程
Server模式下使用,亮点是除Serial外,目前只有它能与CMS收集器配合工作,是一个非常重要的垃圾回收器。
运行示意图
有如下特点:
追求高吞吐量,高效利用CPU,使吞吐量优先,且能进行精确控制。
根据相关特性,我们很容易想到它的使用场景,即:当应用程序运行在具有多个CPU上,对暂停时间没有特别高的要求时,程序主要在后台进行计算,而不需要与用户进行太多交互等就特别适合ParNew收集器。
Serial Old是Serial收集器的老年代版本,同样是一个单线程收集器,使用标记-整理算法。
有如下特点:
优劣势基本和Serial无异,它是和Serial收集器配合使用的老年代收集器。
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。采用的算法是“标记-清除”,运作过程分为四个步骤:
运行示意图
有如下特点:
如常见WEB、B/S系统的服务器上的应用。
Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法,可以充分利用多核CPU的计算能力。
有如下特点:
优劣势参考Parallel Scavenge收集器。
这样在注重吞吐量以及CPU资源敏感的场景,就有了Parallel Scavenge(新生代)加Parallel Old(老年代)收集器的"给力"应用组合;
G1(Garbage-First)是JDK7-u4才推出商用的收集器
有如下特点:
G1收集器是当今收集器技术发展的最前沿成果。
G1 需要记忆集 (具体来说是卡表)来记录新生代和老年代之间的引用关系,这种数据结构在 G1 中需要占用大量的内存,可能达到整个堆内存容量的 20% 甚至更多。而且 G1 中维护记忆集的成本较高,带来了更高的执行负载,影响效率。
按照《深入理解Java虚拟机》作者的说法,CMS 在小内存应用上的表现要优于 G1,而大内存应用上 G1 更有优势,大小内存的界限是6GB到8GB。
个人以为G1已经基本全面压制cms、parallel等回收器,缺点见上面的劣势。但如果不是追求极致的性能,基本可以无脑G1
基本就介绍这些了,垃圾回收器基本不变的知识点多,学会(理解)可以应付N年的相关知识的面试,又是高频面试考点,各位同学还是值得在这块下点功夫的。文中有任何不足,错误欢迎指出,共同进步!
Cache 即高速缓存那么cache是怎么样提高系统性能与运行速度呢是不是在任何情况下用cache都能提高性能是不是cache用的越多就越好呢下面是个人写下的总结如下,有不对的地方,请各位指正:1Cache 是怎么样工作的
Cache 是分配在服务器上的一个公共的内存片。
所谓公共指的cache只要一创建是任何一个客户端浏览器都可以通过后台代码访问到它,它面向的是所有用户,相对而言session也是服务器上的一 段内存,但他面向的是单个用户。它是服务器的一段内存块,也就是说每个cache一经创建就占用了服务器资源的。所以从这点来说我们就可以说:并不是 cache越多越好。
cache 是有时间限制的,超过了服务器设定的过期时间,它就会被服务器回收。
cache 可以存放任何对象
2Cache 怎么样创建以及怎么样销毁
创建cache
在DotNet环境下通过CacheInsert(string key,object o),Insert(objectkey, objObject, CacheDependency Dependency, DateTimeabsoluteExpiration, TimeSpanZero);等方法创建。
其中key 代表cache的ID,o代表存到cache里的对象,DateTimeabsoluteExpiration代码有效时间段。1/在系统管理-系统日志管理-日志管理中点击“系统日志存档” 。
2/在系统管理-系统资源管理中-资源监控点击“系统资源监控管查询”。
可以查询到具体用户的某个模块(如邮件)的具体情况,可以斟酌删除。
3/在系统管理-系统资源管理-资源回收,回收一些不必要的资源。
4/在服务器上(假设OA装在D盘),D:\MYOA\tmp这个文件夹清空。这里面是临时文件。
5/在服务器上(假设OA装在D盘),D:\MYOA\logs这个文件夹里,备份所有log文件到其他位置后,删除这些文件。
6/在服务器上(假设OA装在D盘),将myoa/data5/slowlog日志文件发送给通达技术支持进行分析,并在备份到其他位置后,将该文件删除。
以上是通达OA办公系统的系统管理功能中所提供的多种OA系统优化方式。供参考解决。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)