Java内容整理回顾——第一回 小卷入坑记

        这是本人的第一篇回顾文,从事多年了,但是技术一直比较菜,杂七杂八的会很多点,但是不精,想要让自己清醒一点,萌发了发文串一串各个知识点的想法,文章专属自身做总结回顾,用自己的语言转述一些自己的理解,所以肯定有些错误,如果你是大牛又愿意屈尊看一眼,望有缘指正,如果是新手或者是刚接触想学习的也可以顺便看那么一眼,提出你的建议,或许会有认知的碰撞,谢谢。

        小卷来到了魔都,看着川流不息的人群,想想电视剧中写字楼的办公场景,高呼一声:我要混出个样来!可是面对兜里仅有的200块,还是只能先在薯片厂搬砖,终于在这天,小卷看到了一则广告:JAVA高级程序员培训,让你的人生……,小卷决定去咨询

        计算机程序工作过程

        培训中心的老师得知来意就问小卷,你学校里面学过计算机语言吗?没有!小卷回答很干脆,我零基础。没关系,我们这个班就是针对零基础的,只要你识字!

        我们先说说程序是干啥的,计算机程序就是替我们干活的一个工具,比如让你做数学题,3+2,7-1,你张口就来,可比计算机快多了(咱不抬杠哈,说的是从人的提出到人对结果的摄入,不是比计算速度),就说如果是这么简单的事你肯定不愿写一个程序来做,那么如果让你做庞大的计算,20万道四则混合运算,你肯定愿意写一个程序,秒秒钟就算完了。

        就拿你在薯片厂工作来说,工厂有仓库,有车间,车间有流水线,从仓库(硬盘)用车(总线)运一车土豆到车间(经过的各个门是各设备的IO),然后将土豆放到流水线传送带(内存),经过切片机切片(CPU处理)后再运输到仓库保存。

        你看你在厂里面是负责把土豆搬到机器上的,如果来我们这里学习,我们编写的程序就是解决怎么操纵土豆从仓库出来,分配到哪条流水线,流水线生产空间配置多大,切片机切片方式,薯片包装方式等一系列问题的。

        小卷听得热血沸腾,当即决定把卡里仅有的钱交了培训费。

        入坑扫盲

        小卷开始了第一节课,自然是java的发展历史,其他有的没有就没在意了,比如java的各种特点、市场份额等等,一句话:java牛,比较印象深刻的是说到java跨平台是一大特点,当然也不只是java跨平台,接下来,小卷就开始做笔记了
        
        我们常说计算机机器语言是基于0101编写的,为什么呢?因为根本上到了电信号的时候,可以通过高电位、低电位来区分,或者有信号和无信号来区分(更深层的原理我也说不详细,可以去看模电、数电的知识了),从自然规律形式来看,这契合了我们中国人说的万物分阴阳,一组对立关系是很简单,容易识别的特征。

                                                        
        那么我们的java,c++,python,php等等在计算机语言中称为高级语言,高级语言主要用来描述逻辑,这个逻辑用于模拟人的生产生活活动,要想把高级语言表达的内容翻译成低级语言(也就是机器语言0101),中间是要经历很多的,那么中间这个很多又是一块很大的研究对象(对不起,我胆怯了,让有志之士去研究吧),但是我们知道一点,我们的高级语言是运行在计算机上的,而计算机上有操作系统,操作系统就去负责勾兑(哦,应该说翻译)这个操作系统就是我们常说的平台,所谓跨平台就是同一段java代码编写好,编译后,可以运行在window操作系统,linux操作系统等等,比如c语言在window操作系统下编译好的在linux不能用,这就叫不跨平台;

                                        


        说到这里,可以感觉到一点,这个编译是一个重要的环节,一段c语言代码在window下编译及运行的时候会依赖对应的连接文件,dll文件等(这里我纯属瞎编,因为我不懂c,就坊间这么一听说,所以你也就坊间这么一听,大概这意思),到了linux下那些依赖的文件有所不同,所以运行不起来,但是java呢比较奸,在自己和操作系统中间请了一些代理人,代理人1负责和window勾兑,代理人2负责和linux勾兑,但是这些代理人都是他自己花钱雇的,谁花钱听谁的,所以同一段代码在这些代理人眼里都是一样的,但是每个代理人和对应操作系统之间能通话的,这样沟通就无障碍了

                                
        所以java的编译和运行需要一些代理人,这些代理人的称呼叫java虚拟机,虽然叫虚拟机,但是其实比较勉强,因为相对VMware这些正牌虚拟机来说,他能提供的支持太少了,只是姑且这么叫。

                ​​​​​​​        ​​​​​​​        

       这里有几个概念:jdk,jre,jvm

        jvm:就是我们上述的java虚拟机,jvm加载运行的是.class文件,也就是字节码文件

        jre:java的运行环境,包含jvm,因为我们运行java程序需要提供一个进程入口,也就是说我们用java -jar来运行java程序的时候是依赖这个环境。

        jdk:是java程序开发包,比如我们编写的代码需要编译成字节码就需要用到里面的编译工具,例如我们写了一个.java文件,就需要用到开发包里面的javac工具编译成.class文件,我们下载的jdk包里面就包含了jre

        Look!这就是我们下载的jdk包,里面有jdk和jre,其实,jdk的里面还有一个jre

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        小卷疑惑了,虚拟机?按字面意思,就是虚拟了一台机器咯!

        没错,因为他本质是一个软件,所以是虚拟机,但是我们常说的虚拟机有很多种,他们是有差别的
        正牌虚拟机:我有虚拟cpu、内存、硬盘、网卡,我能很好的假装自己是一台物理机
        java虚拟机:我主要负责类加载、解释执行、内存管理、垃圾回收,我只对java负责

        所以说,Java的虚拟机(JVM)只是基于java程序运行的专用虚拟机,不是普遍意义上的虚拟机,想深入研究可以学习类加载机制,解释器,算法,内存模型,垃圾回收算法等等

        这一块主要讲述了几件事:

        虚拟机如何把你的代码读取并解释的,简单说就是分解,分解的前提就是先定义特征,比如静态数据,方法栈,调用指针,计数器等的协作配合,比如A类中有那些方法,这些方法也是被解释的一种对象,先标记起来,方法之间调用关系入栈出栈也被标记起来,这些被标记的都是虚拟机管理的资源,然后就傻傻的按步骤一步一步的走,将高级语言复杂的逻辑简单化,代价就是不停的重复,谁叫我cpu的计算速度快呢,勤能补拙,我用多出几万倍的步骤重复做简单的事情来达到你们高级思维的模拟。

        虚拟机的内存是怎么管理的,简单说就是分代,什么年轻代,老年代,元空间,把没有依赖的对象干掉来释放更多的运行内存,该干掉谁?当然是没有利用价值的,没有引用就是没有利用价值了,但是暂时有引用的我怎么评估未来有多少利用价值呢,打分!就是按回收次数等级年龄,越久没被干掉就说明你越有用,磨在转,驴不能杀,这其中牵扯的就是各种回收的算法,什么标记清除算法那一堆,另外收集的时候是不是并行的这些策略来管理。

         

        请看下图,这是一个jvm的概要点:

        

        小卷倒吸了一口凉气,则还只是概要,太难学了……

        老师说道:那可不,几乎每一个点都可以讲很多内容出来,但是当下有个印象就行了,我给你们说这些,只是为了先画个饼,说明以后你们要学的很多,如果想提升水平,可以继续报读我们的二期,三期……课程(我仿佛听到了不断被割韭菜的声音),不过,千里之行始于足下,明天开始我们从基本的东西学起,因为你们现在的课程大纲不包含这些详解,你们的课程大纲就是学学什么叫对象,会写get,set,会照着spring架子写个增删改查出来就行了。

 下一篇:第二回 小卷学语法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值