我所理解的Java平台

对于Java技术体系,相信每个Java程序员都会惊叹于整个技术栈的庞大,很多时候会有入门到放弃的心态,因为技术在不断更新,作为Java程序员也时刻保持进步学习状态,这样才能跟上技术的发展。对于我自己来说,同样也是使用Java技术栈工作多年,无论是面试还是日常工作中同事技术交流,会有很多Java相关知识点总感觉没有掌握到位,经常是似懂非懂。

因此希望能通过写作文章来对Java的知识点进行巩固,一方面是希望自己能对Java平台理解更深刻点,另一方面也是希望能通过这样以抛出问题,后续解答的方式进一步加强学习,以便达到巩固和掌握知识点。

那么今天我想谈论的话题是这么一道面试题:「谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗?

思维导图

针对Java平台理解,我的回答是如下思维导图:

JavaCore01.png

从四个方面来回答自己对于Java平台的理解:

  • 基本特性
  • Java类库
  • Java虚拟机
  • 工具

基本特性

Java平台有什么基本特性呢?有面向对象、反射、泛型,这三点也是我们在实际工作项目中会用经常用到的。

面向对象(OOP)是一种编程思想,相对于面向过程来说,更符合我们人类来阅读代码的习惯,更容易写出通俗易懂的代码,而面向过程对于计算机来说,逐行加载执行更便利。面向对象三大特性,封装、重载、多态,具体什么含义就不展开了,网上一搜一大把。我更想强调的是,这三大特性引申出软件设计六大原则,如果你设计的程序围绕的这六大原则,从软件架构角度来看基本不会太差,合乎主流软件设计潮流。

至于反射,也是Java平台的一大利器,可以满足动态加载功能和并行开发模式,比如很多Java框架都是利用反射机制达到开发的便利性,提高程序员开发效率,让程序员可以更专注在自身业务开发上。

最后一点,泛型机制,主要是为了提高开发稳定性,也就是说类型安全,极大提高了程序健壮性,并且泛型机制还借鉴模板机制,对于同一种行为规范,可以套用在不同的数据类型上。

Java类库

除了基本特性之外,Java平台还有一个很大特色是丰富的类库。

比如基础类库:集合、IO/NIO、网络、并发、安全等。我们日常工作常用的容器类库,ArrayList、Map,都有着共同父类,看张图,你就清楚了,这些系统自带的容器类:

JavaCore02.png

除此之外,还有线程安全类和丰富的第三方类库。

Java虚拟机

Java为何能受广大开发者喜爱,很重要的一点就是跨平台,其中跨平台最大的特色就是 Write once,run anywhere (写一次,到处运行)。那么跨平台的关键因素就是Java虚拟机。看下Java虚拟机的结构图:


JavaCore03.png

其中重点了解下JVM中每个模块的作用,主要包括以下几个运行时区域:

1,程序计数器(PC Register),主要是当前线程所执行的字节码的行号指示器。
2,Java虚拟机栈(Stack)Java中的每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。我们常见的StackOverflowError错误,就是常见栈深度大于虚拟机所允许的深度。
3,本地方法栈(Native Method Stack),执行的是虚拟机使用到Nativie方法服务。
4,Java堆,也叫Java Heap,这个是Java虚拟机所管理的内存中最大的一块,Java堆是被所有线程共享的一块内存区域,在虚拟机启动时就创建了。几乎所有的对象实例都在这里分配内存。
5,方法区(Class Area)。这个是主要是用以虚拟机加载类信息、常量、静态变量、编译之后的代码等等。

JVM还有一个特性是垃圾回收策略,相信不少程序员在面试时经常会被问到JVM的垃圾回收策略是什么,新生代、老年代等。主要的垃圾回收策略有这么几种算法:标记-清除算法、复制算法、标记整理算法、分代收集算法,这几个算法的依据是基于可达分析和引用计数思想,来判断对象是否可回收,进一步达到垃圾回收目的。

至于Java编译过程,有这四步:源码-字节码-虚拟机解释-机器码,hotspot 提供了JIT编译器,Java类加载机制,常用版本 JDK(如 JDK 8)内嵌的 Class-Loader,例如 Bootstrap、 Application 和 Extension Class-loader;类加载大致过程:加载、验证、链接、初始化

工具

我们日常会接触到 JRE(Java Runtime Environment)或者 JDK(Java Development Kit)。 JRE,也就是 Java 运行环境,包含了 JVM 和 Java 类库,以及一些模块等。而 JDK 可以看作是 JRE 的一个超集,提供了更多工具,比如编译器、各种诊断工具等。

我们需要善于利用这些工具,了解各种工具用法,以便在面对实际问题时,可以通过不同工具进一步排查,很多时候面对问题时候,往往不是解决问题有多困难,而是分析定位问题原因有多耗时。

小结

总的来说,我是从以上四个方面来理解所谓的Java平台,除此之外,还想补充一点,那就是「静态编译与动态解释」这点。 静态编译的程序在执行前全部被翻译为机器码,通常将这种类型称为AOT (Ahead of time)即 “提前编译”; 而解释执行的则是一句一句边翻译边运行,通常将这种类型称为JIT(Just-in-time)即“即时编译”。 AOT程序的典型代表是用C/C++开发的应用,它们必须在执行前编译成机器码,而JIT的代表则非常多,如JavaScript、python等。 事实上,所有脚本语言都支持JIT模式。但需要注意的是JIT和AOT指的是程序运行方式,和编程语言并非强关联的,有些语言既可以以JIT方式运行也可以以AOT方式运行,如Java、Python,它们可以在第一次执行时编译成中间字节码、然后在之后执行时可以直接执行字节码。

至于Java语言是否是解释执行,因为Java平台有AOT也有JIT,因此Java语言是可以进行解释执行的,可以直接将字节码编译成机器代码,这样就避免了 JIT 预热等各方面的开销,比如 Oracle JDK 9 就引入了实验性的 AOT 特性,并且增加了新的 jaotc 工具。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容