弄明白CMS和G1,就靠这一篇了

弄明白CMS和G1,就靠这一篇了

在开始介绍CMS和G1前,我们可以剧透几点:

  • 根据不同分代的特点,收集器可能不同。有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器。一般来说,新生代收集器的收集频率较高,应选用性能高效的收集器;而老年代收集器收集次数相对较少,对空间较为敏感,应当避免选择基于复制算法的收集器。
  • 在垃圾收集执行的时刻,应用程序需要暂停运行
  • 可以串行收集,也可以并行收集。
  • 如果能做到并发收集(应用程序不必暂停),那绝对是很妙的事情。
  • 如果收集行为可控,那也是很妙的事情。

CMS和G1作为垃圾收集器里的大杀器,是需要好好弄明白的,而且面试中也经常被问到。

希望大家带着[……]

继续阅读

面试官,不要再问我三次握手和四次挥手啦

面试官,不要再问我三次握手和四次挥手啦

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。

见过比较典型的面试场景是这样的:

面试官:请介绍下三次握手
求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。
面试官:然后呢?
求职者:这就是三次握手的过程,很简单的。
面试官:。。。。。。
番外篇:一首凉凉送给你

记住猿人谷一句话:面试时越简单的问题,一般就是隐藏着比较大的坑,一般都是需要将[……]

继续阅读

程序猿菜鸟打怪升级—一路火花带闪电

程序猿菜鸟打怪升级—一路火花带闪电

各位小伙伴,大家好!我是猿人谷,一名搬砖老菜鸟。蓦然回首这几年的打怪升级历程,不再是之前的年轻气盛,也没有百感交集,内心却像湖面躺着那株莲花一般,平静,荡不起半点涟漪。

总结从事搬砖行业的这几年,感觉就是:平台白发银披风,一生都在征战中。初入行时,真的连菜鸟都算不上,顶多是只菜虫。当时听到什么c++,Objective-c,大数据,神经网络。。。。。。真的明白自己就两件事不会:这也不会,那也不会。凭着内心的一股倔强,拼命的学,没日没夜的学算法,刷poj,玩命似的向所有人证明:哥真的不是菜鸟。只记得当时内心非常希望有人能叫我一声大佬!过了这些年后,发现技术真的是浩如烟海,我懂的这点东西真的只是沧[……]

继续阅读

【JVM从小白学成大佬】6.创建对象及对象的访问定位

【JVM从小白学成大佬】6.创建对象及对象的访问定位

《JVM从小白学成大佬》系列推出到现在,收到了很多小伙伴的好评,也收到了一些小伙伴的建议,在此表示感谢。

有几个小伙伴提出了希望出一篇介绍对象的创建及访问,猿人谷向来是没有原则的,小伙们要求啥,咱就尽力满足,毕竟文章就是对自己学习的一个总结及和各位小伙伴交流学习的机会。话不多说,直接开撸!

1 创建对象

在Java程序运行过程中无时无刻都有对象被创建出来,java中对象可以采用new或反射或clone或反序列化的方法创建。接下来我们我们介绍在虚拟机中,对象(限于普通Java对象,不包括数组和Class对象等)的创建过程。

字节码new表示创建对象,虚拟机遇到该指令时,从栈顶取得目标对象在常量池[……]

继续阅读

【JVM从小白学成大佬】5.垃圾收集器及内存分配策略

【JVM从小白学成大佬】5.垃圾收集器及内存分配策略

前面介绍了垃圾回收算法,接下来我们介绍垃圾收集器和内存分配的策略。有没有一种牛逼的收集器像银弹一样适配所有场景?很明显,不可能有,不然我也没必要单独搞一篇文章来介绍垃圾收集器了。熟悉不同收集器的优缺点,在实际的场景中灵活运用,才是王道。

在开始介绍垃圾收集器前,我们可以剧透几点:

  • 根据不同分代的特点,收集器可能不同。有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器。一般来说,新生代收集器的收集频率较高,应选用性能高效的收集器;而老年代收集器收集次数相对较少,对空间较为敏感,应当避免选择基于复制算法的收集器。
  • 在垃圾收集执行的时刻,应用程序需要暂停运[……]

    继续阅读

【JVM从小白学成大佬】4.深入解析强引用、软引用、弱引用、幻象引用

【JVM从小白学成大佬】4.深入解析强引用、软引用、弱引用、幻象引用

关于强引用、软引用、弱引用、幻象引用的区别,在一些大公司的面试题中经常出现,可能有些小伙伴觉得这个知识点比较冷门,但其实大家在开发中经常用到,如new一个对象的时候就是强引用的应用。

在java语言中,除了原始数据类型(boolean、byte、short、char、int、float、double、long)的变量,其他所有都是所谓的引用类型,指向各种不同的对象。理解这些引用的区别,对于掌握java对象生命周期和JVM内部相关机制非常有帮助。也有助于更深刻的理解底层对象生命周期、垃圾收集机制等,对设计可靠的缓存框架、诊断应用OOM等问题也大有裨益。

这四种应用主要的区别体现在对象不同的可达性[……]

继续阅读

【JVM从小白学成大佬】3.Java虚拟机何谓垃圾及垃圾回收算法

【JVM从小白学成大佬】3.Java虚拟机何谓垃圾及垃圾回收算法

在Java中内存是由虚拟机自动管理的,虚拟机在内存中划出一片区域,作为满足程序内存分配请求的空间。内存的创建仍然是由程序猿来显示指定的,但是对象的释放却对程序猿是透明的。就是解放了程序猿手动回收内存的工作,交给垃圾回收器来自动回收。

在虚拟机中,释放哪些不再被使用的对象所占空间的过程称为垃圾收集(Garbage Collection,GC)。负责垃圾收集的程序模块,成为垃圾收集器(Garbage Collector)

既然虚拟机已经帮我们把垃圾自动处理了,为什么还要去了解GC和内存分配呢?

当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对虚拟机[……]

继续阅读

【JVM从小白学成大佬】2.Java虚拟机运行时数据区

【JVM从小白学成大佬】2.Java虚拟机运行时数据区

这里我们先说句题外话,相信大家在面试中经常被问到介绍Java内存模型,我在面试别人时也会经常问这个问题。但是,往往都会令我比较尴尬,我还话音未落,面试者就会“背诵”一段(Java虚拟机是由堆、方法区、虚拟机栈,吧啦吧啦。。。),估计心里还一脸自豪的想幸好哥提前在网上搜过,早有准备。每每这个时候,我都不忍心打断,因为“背诵”的真的太顺畅了!

这也怪不得面试者,首先Java虚拟机方面的知识,对中高级程序猿来说,工作中正面接触Java虚拟机的东西不多。其次,这个其次咱得好好唠唠,网上搜个Java内存模型,度娘推的第一页大都是介绍Java运行时数据区的,起到了一定的误导作用,大写的尴尬。

本篇将给各位[……]

继续阅读

【JVM从小白学成大佬】1.开篇

【JVM从小白学成大佬】1.开篇

JVM的重要性毋庸置疑,可以毫不夸张的说Java虚拟机是整个Java平台的基石。 JVM方面的知识,也一直是BAT等大厂面试考核的重点。特别是JVM调优,故障排查性能调优,你知道该从哪些方面入手吗?

此专栏结合自己对JVM的理解,从java运行时数据区、java内存模型(JMM)、什么是垃圾回收,垃圾回收算法、垃圾收集器、内存分配与回收策略等,也会介绍安全点、安全区域等知识点,还有什么是“卡带”? 相信学习完专栏,在面试时被问到JVM,你定能跟面试官侃侃而谈,话聊人生!

关于JVM的历史以及重要性我就不做介绍,网上能搜到一大堆。我们就直接上干货,希望能最简单直白语言来深入浅出,一步步揭开JV[……]

继续阅读