对Java平台的理解

从业近一年时间了,发现我对Java的理解仅仅限于跨平台,不需要自己管理堆内存,面向对象这些浅显的概念,平时也看过一些关于Java平台的解释,一些名词会在脑海中出现,但是具体含义自己也说不清楚。比如JIT,双亲委派等等。

记录一下从今天起记录一下自己学习过的知识。

什么是Java平台,还记得18年校招面试官问我如果现在让你学习Java,你会怎么学习?

  • 学习Java的面向对象模型,因为Java不同于C++还保留面向过程的特性,所有的代码都必须写在类里面
  • 学习Java的内存管理,因为Java不同于C++,C++程序员需要自己管理申请的堆空间内存。

这是当时我的回答,发现过去一年多了,让我回答这个问题可能答案也差不多。

那么,什么Java平台?

Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”(Write once, run anywhere),能够非常容易地获得跨平台能力;另外就是垃圾收集(GC, Garbage Collection),Java 通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。

如果并不需要开发Java程序,只需要安装JRE(Java Runtime Environment)就可以运行Java程序了,JDK是JRE的一个超集,它还有编译器、诊断工具等。

以上是对Java的一些简单了解,也是目前我对Java平台的了解。

众所周知,我们通常把 Java 分为编译期和运行时。这里说的 Java 的编译和 C/C++ 是有着不同的意义的,Javac 的编译,编译 Java 源码生成“.class”文件里面实际是字节码,而不是可以直接执行的机器码。Java 通过字节码和 Java 虚拟机(JVM)这种跨平台的抽象,屏蔽了操作系统和硬件的细节,这也是实现“一次编译,到处执行”的基础。在运行时,JVM 会通过类加载器(Class-Loader)加载字节码,解释或者编译执行。就像我前面提到的,主流 Java 版本中,如 JDK 8 实际是解释和编译混合的一种模式,即所谓的混合模式(-Xmixed)。通常运行在 server 模式的 JVM,会进行上万次调用以收集足够的信息进行高效的编译,client 模式这个门限是 1500 次。Oracle Hotspot JVM 内置了两个不同的 JIT compiler,C1 对应前面说的 client 模式,适用于对于启动速度敏感的应用,比如普通 Java 桌面应用;C2 对应 server 模式,它的优化是为长时间运行的服务器端应用设计的。默认是采用所谓的分层编译(TieredCompilation)。Java 虚拟机启动时,可以指定不同的参数对运行模式进行选择。 比如,指定“-Xint”,就是告诉 JVM 只进行解释执行,不对代码进行编译,这种模式抛弃了 JIT 可能带来的性能优势。毕竟解释器(interpreter)是逐条读入,逐条解释运行的。与其相对应的,还有一个“-Xcomp”参数,这是告诉 JVM 关闭解释器,不要进行解释执行,或者叫作最大优化级别。那你可能会问这种模式是不是最高效啊?简单说,还真未必。“-Xcomp”会导致 JVM 启动变慢非常多,同时有些 JIT 编译器优化方式,比如分支预测,如果不进行 profiling,往往并不能进行有效优化。除了我们日常最常见的 Java 使用模式,其实还有一种新的编译方式,即所谓的 AOT(Ahead-of-Time Compilation),直接将字节码编译成机器代码,这样就避免了 JIT 预热等各方面的开销,比如 Oracle JDK 9 就引入了实验性的 AOT 特性,并且增加了新的 jaotc 工具。利用

另外,JVM 作为一个强大的平台,不仅仅只有 Java 语言可以运行在 JVM 上,本质上合规的字节码都可以运行,Java 语言自身也为此提供了便利,我们可以看到类似 Clojure、Scala、Groovy、JRuby、Jython 等大量 JVM 语言,活跃在不同的场景。


一些理解

Java特性
  1. 面向对象(封装,继承,多态)
  2. 平台无关性(JVM运行.class文件)
  3. 语言(泛型,Lambda)
  4. 类库(集合,并发,网络,IO/NIO)
  5. JRE(Java运行环境,JVM,类库)
  6. JDK(Java开发工具,包括JRE,javac,诊断工具)
Java是解析运行吗?不是的
  • Java源代码经过Javac编译成.class文件
  • .class文件经JVM解析或编译运行。
    • 解析:.class文件经过JVM内嵌的解析器解析执行。
    • 编译:存在JIT编译器(Just In Time Compile 即时编译器)把经常运行的代码作为"热点代码"编译与本地平台相关的机器码,并进行各种层次的优化。
    • AOT编译器: Java 9提供的直接将所有代码编译成机器码执行。

java程序执行步骤:

第一步javac编译器将源代码编译成字节码。第二部jvm类加载器加载字节码文件,第三步通过解释器逐行解释执行。

第三部也是我们常说的解释执行,如果只有这种方式,代码执行的效率会比较低。有些方法和代码块是高频率调用的,也就是所谓的热点代码,所以引进Jit技术,提前将这类字节码直接编译成本地机器码(这些步骤发生在Java程序启动过程中,不同于AOT它是直接将字节码编译成机器码)。这样类似于缓存技术,运行时再遇到这类代码直接可以执行,而不是先解释后执行。

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

推荐阅读更多精彩内容

  • 1.Docke基础 1.1 理念 ​ Docker的主要目标是“Build,Ship and Run Any ...
    洛美萨斯阅读 617评论 0 0
  • 四月的风,恣意地吹拂亲吻着我们的脸,轻轻摇曳着我们的心;四月的云,躲在星空之中,默默地承载着尘世永恒的依恋。绿柳吐...
    碧霄诗情_4522阅读 168评论 0 0
  • 我越发习惯了...于每天从梦境(镜)世界中初醒过来时...将内心中的想法记录表达写下来...因由...此时的我.....
    镜_a8cc阅读 129评论 0 0
  • 今天太特殊,日期就可以作为标题。今天的清晨特别安静,花含泪,鸟无声,日月经天,寂静无声。 所有的建筑、车辆和行人都...
    WuNing阅读 241评论 0 7
  • 你以为我缺那五万块小钱吗?我缺的是五千万。 在现实生活中,我们不得不用讨厌的方式学会着成熟。 我很讨厌你用这种语气...
    梧桐落叶飞阅读 153评论 0 2