背景
在公司实习了一段时间,觉得不太适合这里。可能是心里想着去大厂,导致身在曹营心在汉。也可能是刚步入社会,尤其是程序员的行业,又碰巧赶上项目即将完工将要上线,对加班还是没有做足充分的准备,一时间多少有点不满。也可能是其他原因。不管怎么样吧,还是打算等到实习期结束就换公司,去追逐自己的梦想。大厂不好进,先不说知识面的广度,单是基础知识的深度这一关就拦下了大量的人。所以我打算先加深对java的认识,不在停留在使用阶段,而是要去理解为什么要这么用。
首先开始的就是java虚拟机,利用实习的一些零碎时间和周六日的时间,在网上看了一些博客以及视频,大致对java虚拟机有了一些了解,就把学到的知识做了一个思维导图,方便从"宏观性"把控虚拟机的组成,也方便后期的复习。
注意:这里只是学习总结,肯定有些不足,欢迎大家指出。另外,这个思维导图偏向于对虚拟机的结构展示,具体的知识点并没有过多的写在思维导图中,还是要去查资料的。
好了,话不多说,进入正题!
java编译器
我们都知道java虚拟机是执行class文件的,那么class文件是怎么生成的?先来了解一下javac的知识吧!
总体图样
先来看看总体的图样,然后再分别对每个部分进行了解。
javac编译
第一部分我们先来了解java文件是怎么变成class文件的。
这里我们需要了解javac的执行流程。
class文件结构
编译好了class文件,我们需要了解class文件中都有什么东西。虽然我们只关注java文件怎么写的,不太注意class文件。
这两块东西大致了解一下,下面的才是重点。
类加载
有了class文件,我们在使用就得把编译好的class加载到内存中,交给java虚拟机来处理。这里我们需要了解加载的流程,以及每一步的作用。
这里需要注意一些名词的意思,不弄懂名词的意思,很可能会混淆对知识点的理解。
jvm体系
我们都知道我们的程序都是运行在jvm之上的,所以有必要了解一下这个在java中有着举足轻重地位的jvm。
java虚拟机
总体结构
老套路,还是先来看看java虚拟机的总体结构。
虚拟机发展史
先不看虚拟机中有什么东西,我们先来了解在"历史的长河"中有哪些虚拟机。
因为我们的java默认是HotSpot虚拟机,所以可以重点关心这个,其他的就做一些了解。
内存区域
内存区域和垃圾回收时java虚拟机中的重点,我们需要着重学习这两个。
这里写的有点粗糙,毕竟理解还不全面。 ̄□ ̄||
垃圾回收
了解完内存分布,接下来就是垃圾回收了!
这个的重要性就不多说了。
虚拟机工具
如何观察看不见的内存空间使用情况和垃圾回收的情况呢?sun也就是oracle公司为我们提供了一些工具。
经常使用到的还是可视化的工具,侧重了解这个。
性能优化
这个就是经验之谈了,没有固定的方法。可以去查一些资料。
#### 再次重申下:
这个思维导图是我自己写的,由于知识面不够,可能导致思维导图的排版不恰当、列出的内容不全等等。有意见的欢迎提出,但是请诸位道友下手轻点,毕竟混迹在江湖中也是不易!^ — ^