最后
为什么我不完全主张自学?
①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
jmap(Merory Map for java)命令用于生成堆转储快照(一般称为heapdump或dump文件)
5、jhat:虚拟机堆转储快照分析工具
Sun JDK提供jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,分析jmap生成的堆转储快照jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看。
6、jstack:java堆栈跟踪工具
jstack(Stack Trace for java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者Javacore文件),线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因,线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做了些什么事情,或者等待着什么资源。
在JDK1.5中java.lang.Thread类新增了一个getAllStackTreces()方法,用于获取虚拟机中所有线程的StackTraceElement对象,使用这个方法可以通过简单的几行代码就完成jstack的大部分功能,在实际项目中不妨调用这个方法做个管理员页面,可以随时使用浏览器来查看线程堆栈。
<%@ page import=“java.util.Map”%>
<% for (Map.Entry
7、HSIDS:JIT生成代码反汇编
HSIDS是一个Sun官方推荐的HotSpot虚拟机JIT编译代码的反汇编插件
二、JDK的可视化工具
1、JConsole:java监视与管理控制台
JConsole(java monitoring and management console)是一种基于JMX的可视化监视管理工具,它管理部分的功能是针对JMX MBean进行管理,MBean可以使用代码,中间件服务器的管理控制台或者符合JMX规范的软件进行访问。
2、VisualVM:多合一故障处理工具
VisualVM(All-in-One java Troubleshooting Tool)是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序,并且可以预见在未来一段时间内都是官方主力发展的虚拟机故障处理工具,官方在VisualVM的软件说明上写上了“All-in-One”的描述字样,预示着它除了运行监视、故障处理外,还提供了很多其他方面的功能,如性能分析,VisualVM的性能分析功能甚至比起JProfiler YourKit等专业且收费的Profiling工具都不会逊色多少,并且VisualVM还有一个很大的优点:不需要被监视的程序基于特殊Agent运行,因此它对应用程序的实际性能的影响很小,使得它可以直接应用在生产环境中,这个优点是JProfiler YourKit等工具无法与之媲美的。
第五章 调优案例分析与实战
=================
在《深入理解java虚拟机》书中本节的主要内容是讲作者在工作过程中对调优的一些经验实战。对于我们读者来说,重点是学习作者分析解决问题的具体思路。
一、编译时间和类加载时间的优化
编译时间是指虚拟机的JTI编译器编译热点代码的耗时。
虚拟机内置了两个运行时编译器,如果java方法被调用次数达到一定程序,就会被判定为热代码交给JIT编译器,即时编译为本地代码,提高运行速度,这就是Hotspot虚拟机名字的由来。
二、高性能硬件上的程序部署策略
1、基本信息简介
(1)环境:一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新系统硬件为4个CPU、16G物理内存、OS为64位CentOS5.4、Resin作为Web服务器。
(2)说明:整个服务器暂时没有部署别的应用,所有硬件资源都可以提供给访问量并不算太大的网站使用。管理员为了尽量利用硬件资源选用了64位的JDK1.5,并通过-Xms和-Xms参数将java堆固定在12GB。
(3)问题:使用一段时间后发现使用效果不理想,网站经常不定期出现长时间没有响应的现象。
(4)排查:监控服务器运行状况后发现网站没有响应是由于GC停顿导致的,虚拟机运行在Server模式中,默认使用吞吐量优先收集器,回收12GB的堆,一次Full GC的停顿时间高达15秒。并且由于程序设计的关系,访问文档时要把文档从磁盘提取到内存中,导致内存中出现很多由文档序列化产生的大对象,这些大对象很多都进入了老年代,没有在Minor GC中清理掉。这种情况下即使有12GB的堆,内存也很快被消耗殆尽,由此导致每隔十几分钟出现十几秒的停顿。
(5)分析:先不延伸讨论程序代码的问题,程序部署上主要问题显然是过大的堆内存进行回收时带来的长时间停顿。硬件升级前使用32位系统1.5GB的堆,用户只感受到访问网站比较缓慢,但不会发生十分明显的停顿,因此才考虑升级硬件来提升程序效能,如果重新缩小给java堆的内存,那么硬件上的投资就浪费了。
2、高性能硬件上部署程序的方式
目前主要有两种方式:
(1)通过64位JDK来使用大内存
(2)使用若干个32位虚拟机建立逻辑集群来利用硬件资源
3、通过64位JDK来使用大内存
对于用户交互性强、对停顿时间敏感的系统,可以给java虚拟机分配超过堆的前提是有把握把应用程序的Full GC频率控制得足够低,至少要低到不会影响用户使用,譬如十几个小时乃至一天才出现一次Full GC,这样可以通过在深夜执行定时任务的方式出发Full GC甚至自动重启服务器来将内存可用空间保持在一个稳定的水平。
控制Full GC频率的关键是看应用中绝对多数对象能否符合“朝生夕灭”的原则,即大多数对象的生存时间不应太长,尤其是不能产生批量的、长生存时间的大对象,这样才能保证老年代空间的稳定。
总结
如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了
《Java中高级核心知识全面解析》
小米商场项目实战,别再担心面试没有实战项目:
652282433)]