JDK源码阅读(二)
前言
在了解了基类和基础数据类型加上字符串的基础上,我们就要开始集合类的学习了,这些就是我们需要经常用到的一些。
我的学习笔记
看JDK的源码是非常有效的学习方法,对深入学习和理解起着关键作用,要保持阅读源码的习惯,之后我们会经常对一些重要的源码进行整理,之前已经看了集合类,今天从基本类型开始,关键是多看,每次看都有新发现,这里主要列出别人整理过的深层次理解,方便自己经常结合源码看。
剑指offer是非常经典的算法面试题,之前在牛客网上做过一遍,现在做第二遍并且分析记录。博客中还会出现数据结构和经典算法的篇幅,但是剑指offer单独拿出来,总共60多个题,分析一下,到时候也可以给师弟网友学习过程中作为参考。我自己也能熟悉面试题,巩固算法知识,保持编程状态。
我们已经了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能被运行和使用。而虚拟机如何加载这些Class文件?这些信息进入到虚拟机后会发生什么变化?。这是我们接下来要学习的内容。
以前计算机程序课上老师总说:计算机只认识0和1,写的程序都会编译成为0和1组成的二进制格式才能被计算机执行。然而10多年的时间过去了,今天的计算机仍然只能识别0和1,但是建立在虚拟机之上的大量程序语言发展迅速,将2我们编写的程序编译成二进制本地机器码(native code)已不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令无关平台中立的格式作为程序编译之后的存储格式。这也是Java这类语言,平台无关性的基石。而且虚拟机上更有语言无关性的趋势。
在了解了Java运行时内存区域之后,我们知道虚拟机可能造成内存溢出OOM,虽然有垃圾回收机制,但是可能也不能避免,我们现在就看看Java的垃圾收集机制为例避免内存溢出异常已经做出了哪些努力。
这段时间准备整理下JVM的知识,了解Java就必须了解java虚拟机的特性,本节先从Java的自动内存管理机制来讲起,有一句话:Java与C++之间有一堵由内存动态分配和垃圾手机技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。