【Java核心技术卷】谈谈对Java平台的理解

article/2025/5/25 13:15:06

专题 | 谈谈对Java平台的理解

2019年4月24日下午    沉晓
图片名称
`
学Java已经快两个月了,结果被问到 "你能给我解释一下什么是Java平台吗?"
结果支支吾吾地说了一大堆,却毫无逻辑可言,感觉超级失败
我觉得很有必要重新谈谈我对Java平台的认识,帮我理清逻辑的同时,希望能够帮助你.

Java平台如何理解

Java平台的体系包括了以下几个重要组成部分:

  • Java程序设计语言
  • Class文件格式
  • 各种硬件平台上的Java虚拟机
  • Java API类库及相关工具
  • 来自商业机构和开源社区第三方Java类库

就Java平台而言, Java是一种面向对象的语言,它拥有两个显著的特性:

  1. 跨平台,号称 一次编写,随处运行
  2. 垃圾收集(GC, Garbage Collection),Java 通过垃圾收集器(Garbage Collector)回收分配内存,
    大部分情况下,程序员不需要自己操心内存的分配和回收。

说到跨平台, 就需要引入Java的从源代码到执行的过程存在的机制了:
Java源程序首先要通过编译,翻译成字节码文件(.class文件), 字节码文件再通过Java的虚拟机的解释器和JIT(即时编译器),翻译成二进制交给CPU进行执行.
在这里插入图片描述

主流版本 JDK8

所有的程序,最终都要回归二进制,由CPU进行执行, 跨平台的关键就在于编译之后,:
首先讲一下虚拟机(JVM), JVM有针对各个操作系统对应的版本, 能够调用相应操作系统的API, 对于这种"中间件",需要建立一套标准,这套标准的语言规范就是字节码语言规范.

你可能会迷惑,我这里说明一下, Java程序语言规范不同于字节码语言规范, Java诞生早期,它们在语法上类似,功能上类似.
随着Java的发展, Java需要引入了很多特性,但是作为JVM支持的字节码语言规范不能够轻易变更, 就需要在Java程序语言规范和编译器上加一些东西,使JVM能够支持, 比如说泛型和内部类, JVM是不认这个的, 只是编译器动了一些手脚,让JVM能够去支持,如果想进一步了解,可以看我的专栏 <Java核心技术 卷1>

Java编译器编译Java后翻译成字节码文件,而不是二进制,使得Java具备了跨平台的能力.
说到这里,想多点关于JVM将字节码文件翻译成二进制的过程,
JVM采用 解释和编译混合的一种模式,即所谓的混合模式(-Xmixed)。
通常运行在 server 模式的 JVM,会进行上万次调用以收集足够的信息进行高效的编译,client 模式这个门限是 1500 次。
Java发展那么多年,经过统计研究表明, "绝大多数应用程序,都表现为: 小部分的代码,耗费了大多数的资源", 基于这种分析,有些方法和代码块是高频率调用的,也就是所谓的热点代码,所以通过即时编译器,提前将这类字节码直接编译成本地机器码。这样类似于缓存技术,运行时再遇到这类代码直接可以执行,而不是先解释后执行,这也是Java速度为什么提高如此之快的原因了.但是千万别认为,编译后,再去执行速度就会很快, “-Xcomp”会导致 JVM 启动变慢非常多,同时有些 JIT 编译器优化方式,比如分支预测,如果不进行 profiling,往往并不能进行有效优化。

解释: server是服务器端 client是客户端

Oracle Hotspot JVM 内置了两个不同的 JIT compiler,C1 对应前面说的 client 模式,适用于对于启动速度敏感的应用,比如普通 Java 桌面应用;C2 对应 server 模式,它的优化是为长时间运行的服务器端应用设计的。默认是采用所谓的分层编译(TieredCompilation)。关于分层编译的内容,以后会写到.
Oracle JDK9 支持分层编译和 AOT 协作使用, 其中AOT(Aheadof-Time Compilation),直接将字节码编译成机器代码,这样就避免了 JIT 预热等各方面的开销,因为我个人对这个也不太了解,可以参考http://openjdk.java.net/jeps/295。

在这里突然想穿插一些内容:
Python的热度近年来持续升高, 加之go语言和Node.js的发展,多少撼动了Java后端的地位.
但是未来的主流是混合编程, 现在Python是通过解释器执行的, 但是Python通过某种改变可以在Jython(虚拟机)上面运行,这也是Java虚拟机带动发展的结果. 如果走到了混合编程的那一天,在不同的场景选择合适的语言, 带来的好处将超乎人们的想象.

对于垃圾回收机制, 今后,我会开一个专栏<深入理解Java虚拟机>,你或许听过这本书,我会在这个专栏里,记载我的感悟. 还有 Java API类库及相关工具 和 来自商业机构和开源社区第三方Java类库, 这个就需要项目经验了, 靠时间博得的东西拉不开差距, 拉得开差距的地方在于对Java核心技术的掌握, 无非就是你付出了多少时间 ,你忍受了多少寂寞, 耐住性子深入学习了多久.

文章来源:https://blog.csdn.net/qq_42322103/article/details/89490692
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://chatgpt.dhexx.cn/article/HZJBC3sQ.shtml

相关文章

对《Java核心技术卷一》读者的一些建议

思想不会变&#xff0c;所以《Java编程思想》还停留在第 4 版&#xff08;2007 年&#xff09;&#xff1b;而技术是要更新迭代的&#xff0c;所以《Java核心技术卷一》来到了第十版&#xff08;2016 年&#xff09;。 我们来看一下《Java核心技术卷一》第十版的大纲。 前九章…

Java核心技术卷1基础知识课程-专题视频课程

Java核心技术卷1基础知识课程—2人已学习 课程介绍 Java核心技术入门视频培训课程&#xff1a;该教程系统全面讲解Java语言的核心概念&#xff0c;语法&#xff0c;重要特性和开发方法&#xff0c;讲解Java开发工具跟编程思想、用Java开发具体的系统程序&#xff0c;让…

Java核心技术卷II:高级特性

网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用&#xff0c;下载后请24小时内删除&#xff0c;支持正版&#xff0c;喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击“普通下载”)购买正版 封页 内容简介 本书是Java领域有影响力和价值的著作之…

# java 核心技术卷1 (原书第11版)通读 第一章:java的基本程序设计结构

前言&#xff1a; 我是一名前端开发人员&#xff0c;因为想自学java&#xff0c;根据网络上的推荐顺序&#xff0c;决定从呼声最高的 java 核心卷 11版 读起&#xff08;PS:其实12版已经出来了&#xff0c;但是只有实体书&#xff0c;没有电子版呀。实体书太贵了&#xff0c;7…

Java核心技术卷1:基础知识(原书第10版)

本书为专业程序员解决实际问题而写&#xff0c;Java基础知识面覆盖很完整&#xff0c;可以帮助你深入了解Java语言和库。在卷I中&#xff0c;Horstmann主要强调基本语言概念和现代用户界面编程基础&#xff0c;深入介绍了从Java面向对象编程到泛型、集合、lambda表达式、Swing …

【Java核心技术卷】I/O详析

文章目录 概述Java io基本概念关于流流的分类 Java io框架一、以字节为单位的输出流的框架图&#xff08;1&#xff09;框架图图示&#xff08;2&#xff09;OutputStream详解&#xff08;3&#xff09;OutputStream子类&#xff08;4&#xff09;引申&#xff1a;打印流 二、以…

java核心技术卷1基础知识整理

java核心技术卷1基础知识整理 1.java概述2.java程序设计3.对象与类4 继承5 接口、lambda 表达式与内部类6 并发 1.java概述 1.Java 剔除了 C 中许多很少使用、 难以理解、 易混淆的特性&#xff0c; 在目前看来&#xff0c; 这些特性带来的麻烦远远多于其带来的好处。 2.Java …

《Java核心技术卷1》

第3章 Java的基础程序设计结构 整型 用int类型表示一百万可以这么写&#xff08;since 1.7&#xff09; int a 1_000_000; System.out.println(a);//1000000可用0b或0B表示二进制&#xff08;同样since 1.7&#xff09; byte a 0b0000_0010; System.out.println(a);//2如出…

vue class style 三元运算

<span :style"{color: true ? red : }">test1</span> <span :class"{show: true,hide: false}">test2</span>

Vue 实现拖拽模块(一)拖拽添加组件

本文主要介绍了vue拖拽组件实现构建页面的简单实现&#xff0c;文中通过示例代码介绍&#xff0c;感兴趣的小伙伴们可以了解一下 本文主要介绍了 Vue拖拽添加组件的简单实现&#xff0c;具体如下&#xff1a; 效果图 实现思路 使用 H5 的新特性拖放操作来实现&#xff0c;拖…

vue拖拽三种方法

如果想拖拽排序的可以用组件&#xff1a;vuedraggable。 组件安装 npm i vuedraggable -S引入 import draggable from vuedraggable配置项 group: string or array 分组用的&#xff0c;同一组的不同list可以相互拖动 sort: boolean 定义是否可以拖拽 delay:number 定义鼠标…

Vue3 CSS v-bind 计算和三元运算

官方文档 中指出&#xff1a;CSS 中的 v-bind 支持 JavaScript 表达式&#xff0c;但需要用引号包裹起来&#xff1a; 例子如下&#xff1a; <script lang"ts" setup> const treeContentWidth ref(140); </script><style lang"less" scop…

【记】Vue - 拖拽元素组件实现

需求描述&#xff1a; 1.可实现PC/移动端元素拖拽移动 2.支持2种模式&#xff1a;1.元素跟随光标点放置2.元素在光标点平齐位置靠侧边吸附 市面上估计有很多这种组件和功能了&#xff0c;但我没找到合适的&#xff0c;用了VueUse的useDraggable Function感觉不太适合某些应用…

Vue:可拖拽组件

在实际开发中&#xff0c;很可能会遇到开发可拖拽组件的需求&#xff0c;目的是应对某些弹框组件会遮盖某些重要信息/可操作面板&#xff0c;通过可拖拽的形式可以将上层的弹框组件移动到其他位置&#xff0c;从而不影响整个系统的操作。下面&#xff0c;我们分两步走&#xff…

vue+ element 三元运算符设置按钮样式

效果图 代码块 <el-button-group><el-button size"small" click"notSelect()" :class"[status 1?isActive:]" autofocus"true" v-focus plain>待选</el-button><el-button size"small" click"…

vue三目运算符可以写html代码么,Vue-js之文本渲染、属性(样式)绑定、三元运算符、事件处理...

文本渲染之3种方式 1.{{}}&#xff1a;插值表达式 弊端&#xff1a;会出现页面闪烁问题 v-text&#xff1a;把vue实例中的内容当作纯文本&#xff0c;显示在浏览器 v-html&#xff1a;把vue实例中的内容进行渲染后&#xff0c;浏览器会再次执行文本渲染 {{msg}} let vm new Vu…

vue中的三元运算符

我们要做的效果如下&#xff1a; 如上图的全部分类效果&#xff0c;符号、的样式具体写法如下图&#xff1a;数据如下&#xff1a; 补充&#xff1a;我们一开始想的可能是在数据中直接加符号、&#xff0c;但是脑子想让我换个想法&#xff0c;所以想先控制显示&#xff0c;第一…

vue 在 html标签上 做三元运算

众所周知&#xff0c;在js 中 a<b?‘方法一’:‘方法二’ 这种 三元运算 是比较方便快捷&#xff0c;那么如何在html标签上直接使用呢&#xff1f; 在 标签包裹中&#xff0c;一半为内容&#xff0c;可以直接使用 例如&#xff1a; <p class"price">{{p…

抖音快手短视频去水印API,接口开发文档

开发者官网&#xff1a;http://api.lingquan166.com/ 简介&#xff1a;根据抖音、微视、小红书、皮皮搞笑等APP中复制出来的链接&#xff0c;解析获取短视频的标题、封面、无水印短视频地址等信息。 接口地址&#xff1a; https://api.lingquan166.com/dsp?token122917VU601…