查漏补缺(七):线程数设置

线程池中的最大核心线程数应该怎么样设置?

这个要看实际场景,简单来说。假如CPU数量是N,如果是计算密集型,那么线程数就设置为N,这样可以最大程度地发挥CPU优势,并且减小线程切换的开销。那如果是IO密集型,如果IO操作往往伴随着一系列阻塞式API,所以此时线程数可以设置得高一点。实际上是有一个公式的:
在这里插入图片描述

Minor GC和Full GC触发的条件

Minor GC:新生代空间不足
Full GC:

  • 从代码的角度,我们调用System.gc(),就是建议JVM进行一次Full GC,但是不能保证执行
  • 一个大对象大到一定程度,会被优先分配到老年代,此时老年代如果空间不足,就会触发Full GC
  • 新生代中的对象满足一定年龄条件会晋升到老年代,此时如果老年代空间不足,就会触发Full GC
  • Minor GC进行的时候需要有分配担保机制,如果老年代分配担保失败,也会触发Full GC
  • 当方法区空间不足的时候,也会触发 Full GC

其实Full GC的触发,还与垃圾回收器有关。CMS默认会在内存达到68%时触发

String.intern()在JDK6之前与之后的区别?

在JDK6之前,String.intern()的原理就是,先去字符串常量池查看是否有对应的对象,如果有,则直接返回引用,否则的话就在常量池创建,然后再返回
而在JDK6之后,同样的,它也要先去字符串常量池检这个字符串对象是否存在,如果有就直接返回,如果没有的话,它会去堆内存中获取该对象的引用,放到常量池里,再进行返回。

发布了60 篇原创文章 · 获赞 7 · 访问量 3848

猜你喜欢

转载自blog.csdn.net/SCUTJAY/article/details/105011556
今日推荐