黑马程序员JVM完整教程,Java虚拟机快速入门,全程干货不拖沓

作者: 黑马程序员分类: 野生技能协会 发布时间: 2019-10-08 14:28:24 浏览:1182648 次

黑马程序员JVM完整教程,Java虚拟机快速入门,全程干货不拖沓

Forever黄:
目前刚好看了一半,说一下我自己的看法吧 1、相比尚硅谷的课程,黑马的课程非常简练精干,总长17小时,该讲的部分都讲到了,尚硅谷的课程我个人认为太过于冗长,没法突出重点,55个小时听到天荒地老 2、我认为老师在内存模型那一块讲的非常好,理论+实践很容易懂,到了CMS和G1这块让我稍微犯了迷糊,因为涉及很多专业名词之前没有提到过就讲了,比如写屏障,卡表等等,建议结合《深入理解JVM》一起看,另外还有jdk8,9部分关于gc的更新我也没大听明白,不过这部分了解就行 3、接上条,《深入理解JVM》这本书是必买的,说是JVM圣经不夸张 4、关于弹幕,有些同学会在老师讲课比较跳跃或者不太严谨的时候的时候给大家举例子讲解补充,所以我还是推荐开弹幕听课。但是有些人,你们是初中小孩吗,“太简单了一学就会了”,你咋这么厉害呢,回家告诉你妈妈吧,让她奖励你一个大红花

【回复】回复 @庞了了 :别说从零了,就算学了框架,工作了,多看几遍也挺好
【回复】这个视频是从零开始学jvm吗? 就是有java基础,但是还没学过jvm的
【回复】时过境迁,我现在居然在搞Android……
Reactive_:
“会GC调优吗?” “会。” “什么时候调的?” “面试的时候。”

【回复】你他娘的真是个人才!!!
关关难果关关过:
我来补充一点吧,在讲cms的时候,老师说的是因为内存碎片,导致内存不足而产生让cms退化成serialold,而我在《深入理解Java虚拟机》中和网上的相关资料中查找发现,因为内存碎片,导致内存不足会让虚拟机提前进行一次fullgc,这里是不会退化成serialold的。而退化成serialold是因为并发清理阶段产生的浮动垃圾超过了cms设定的预留空间

【回复】我也看了深入理解Java虚拟机,总结一下大概是:CMS垃圾收集器有两点缺陷,其一是无法处理浮动垃圾,即在并发清理的过程中,用户线程又产生了新的垃圾,这些垃圾无法标记只能等到下次FullGC进行清理。所以老年代需要预留一定的空间装下浮动垃圾,在JDK1.6版本下,CMS启动阈值为92%,即老年代内存超过92%启动CMS。在这个过程中就可能导致并发失败,即CMS运行时内存空间无法满足,这时虚拟机才将Serial Old拿出来并且STW,进行串行的垃圾清理。
【回复】回复 @清水仙菌 :你的第二行逻辑不正确“浮动垃圾无法被标记只能等到 下次FullGC进行清理”,深入理解jvm是这么说的,标记清除过程中,用户线程产生的垃圾会被下一次垃圾收集处理掉,而要触发FullGC需要在标记清除的过程中,堆中CMS收集器预留的内存空间装不下用户线程产生的对象垃圾会造成并发失败,从而会导致FullGC
【回复】其二是CMS基于标记-清理垃圾回收算法,这种算法效率相对很高,但会导致清理后的空间产生很多内存碎片,当大对象得不到足够的连续空间时,就回再一次触发FullGC。这里就有些模糊,书中并没有明确说明是否虚拟机对这种情况是够启动了Serial Old,只说明CMS会对内存空间进行整理。但是是如何整理的呢?CMS使用标记-清除算法并不能整理内存空间,所以我认为还是启动了Serial Old进行内存整理。但是为了保证CMS并发行与低延迟,应当是执行几次不压缩的FullGC,再执行一次压缩空间的FullGC
马可巴子:
这个老师讲的非常好,都是干货,没有废话,b站的一些jvm视频我都了解过一下,尚硅谷的虽然有深度也不错,但太啰嗦了。。。狂神的那个没有一点深度,看了跟没看没啥区别,综合来说我还是更喜欢黑马这个视频

【回复】回复 @PS酷教程 :你自己再去看看《深入理解Java虚拟机》这本书,就会知道狂神连jvm的皮毛都不懂,我以前也是觉得他通俗易懂才粉他,现在我早就取消关注了,误人子弟的东西
【回复】回复 @马可巴子 :很简单,我以前也粉狂神,现在早就取消关注了。没什么,因为我变强了。狂神那个把引用计数法跟三个算法放一起讲就知道什么水平了,误人子弟的东西。我以前还不相信,总觉得计算机少年出英雄,其实年龄是判断技术高低的重要指标之一。那个97年的狂神其实就一初中级Java水平,还冒充什么架构师,天天有大厂求他上班的那种,想想就可笑至极,也只有初级和在校大学生才听他胡扯
【回复】我觉得狂神是看了这些视频然后再自己录的,内容差不多,但实在是缺乏深度,可能他知道80%,表达出来也就60%
CodeAli:
自己观看视频总结的笔记,链接如下(觉得可以的给我赞哦,感谢!!!): https://blog.csdn.net/weixin_50280576/article/details/113742011

【回复】好家伙,多线程的课你总结的也不错
【回复】大佬牛批,看到你做的比较,我又想偷懒了
【回复】哈哈,你这笔记和我关注的一个博主做的一模一样
叮咚叮咚是猪:
这是我看过所有讲jvm最好的课程,没有之一[大哭]

【回复】真羡慕你们19年找工作的人 现在就业市场一片荒芜
【回复】那确实,毕竟你也仅看过这一个jvm课程.
【回复】我看了一半,因为这个老师讲juc确实不错,jvm看得我头大
大兄弟啊-:
我对老师讲的18集进行补充一下,有的小伙伴可能会对老师这里讲的有些疑惑,String的直接赋值不应该是在常量池中吗,为啥会造成堆内存溢出呢,这里我进行解释一下,老师讲的可能不是很清楚,第一个String a = "hello";是在常量池中的,但是当进入while循环后进行了a = a + a;的操作,因为a是一个变量,当变量不管是和常量还是变量相加的时候,都会在堆内存中开辟一片空间,常量池中因为a始终在变所以也会开辟一片空间。-------》所以这就是造成堆内存溢出的原因。 送我上去啊

【回复】回复 @平安芬达 :String a = "hello";a = a + a; 底层是调用StringBuilder的append方法做了字符串拼接,之后调用StringBuilder的toString方法new了一个String对象再赋给a。这样每+一次,就会产生一个新对象,并且由于有list的引用指向它,不会被垃圾回收,最终造成堆内存溢出。
【回复】a没入池,常量池不会另外开辟空间把
【回复】顶你[支持]老兄可太细了
山丶云:
b站jvm讲得最好的,没有之一。我平常不会说这话,真的厉害,想知道老师名字。

【回复】回复 @嘻嘻哈哈吼吼i :您好,还有这个老师的其他课程吗
【回复】回复 @天下无贼SK :黑马的 并发 jvm netty都是他的哦!
我爱吃蕃蕃茄:
官网看了一下老师的发量,自此我对老师的实力深信不疑!

【回复】回复 @斯沃福德 :我认为先看jvm吧
【回复】请问应该先看jvm还是先看多线程并发编程?
小皮皮哦:
根据视频和老师提供的pdf总结的笔记,欢迎大家参考[打call] 1.JVM-内存结构:https://blog.csdn.net/qq_45966440/article/details/120824295?spm=1001.2014.3001.5502 2.JVM-垃圾回收:https://blog.csdn.net/qq_45966440/article/details/120824468?spm=1001.2014.3001.5502 3.JVM-类加载与字节码技术:https://blog.csdn.net/qq_45966440/article/details/120824576?spm=1001.2014.3001.5502 4.JVM-内存模型:https://blog.csdn.net/qq_45966440/article/details/120824759?spm=1001.2014.3001.5502 冲![打call]

isle404:
给兄弟萌一个思路。 如果只为了面试八股文,可以把javaguide的jvm面试题也打开。 如果课程讲到了,就猫一眼面试题八股文是怎么说的,简单记一下。

Seazean:
个人学习笔记,JVM部分参考了黑马和尚硅谷,排版绝对整洁美观,欢迎star:https://github.com/seazean/javanotes

【回复】可以在gitee上也上传一下吗?
【回复】回复 @照耀心灵 :可以直接在 Github 上下载下来看
rongmomo_yeah:
今天是2021-05-22:22:53 再一次复习学习jvm,我希望我在一个月之内找到心仪的公司,祝福大家!

【回复】统一回复一下,今天看到有个人点赞我才回看这个评论,没想到两年前的评论会有怎么大佬回复,换工作已经有两年了 希望大家都可以找到心仪的工作
【回复】4个月过去了 你找到工作了吗
曲短情长丶:
第一遍你可能不懂JVM所以看得模模糊糊,然后学了点其他知识又回头看看笔记,才会再次发现这个课程有多好(类加载那部分就看了一遍,看不太懂,先把面试重要的先看了)。再看看查缺补漏了

【回复】回复 @斯沃福德 :都可以吧,都有相互联系的地方。[脸红]尚硅谷宋红康老师的jvm也挺详细的
【回复】请问应该先看jvm还是先看多线程并发编程?
w快快来:
这里的m3,就是有返回一个stringbuilder的那个方法是线程安全的。因为你返回的时候,方法已经执行完成了。

【回复】回复 @53941265877_bili :说的是stringbuilder的那个对象不安全
大兄弟啊-:
我对老师讲的18集进行补充一下,有的小伙伴可能会对老师这里讲的有些疑惑,String的直接赋值不应该是在常量池中吗,为啥会造成堆内存溢出呢,这里我进行解释一下,老师讲的可能不是很清楚,第一个String a = "hello";是在常量池中的,但是当进入while循环后进行了a = a + a;的操作,因为a是一个变量,当变量不管是和常量还是变量相加的时候,都会在堆内存中开辟一片空间,常量池中因为a始终在变所以也会开辟一片空间。-------》所以这就是造成堆内存溢出的原因。[呲牙]

【回复】不会,串池中应该始终只有一个"hello",后面a+a产生的新对象都是在堆中,由于每产生一个新对象都加入到了list中,所以一直被引用,没有被回收,所以就会溢出。
【回复】回复 @稻盛小童鞋 : 正解
飞机场的十点半0228:
这个老师讲得太好了,争取一周打通jvm和并发编程,春招实习面试冲冲冲

【回复】回复 @景景景景景色分ming :我没看过尚硅谷的那个 这个感觉讲的挺全的 面试的时候问的问题不太会超过这个范围 如果想深入一点的话 可以看看 深入理解java虚拟机 这本书
【回复】回复 @飞机场的十点半0228 :看黑马的JUC和JVM找到实习了吗
【回复】回复 @白的年轮蛋糕 :字节跟美团都拿了,秋招直接转正了,现在已经躺平了

jvm 教育 JAVA 视频教程 jvm教程

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读