没有合适的资源?快使用搜索试试~ 我知道了~
1谈谈对java平台的理解1
需积分: 0 0 下载量 139 浏览量
2022-08-03
20:59:25
上传
评论
收藏 787KB PDF 举报
温馨提示
试读
12页
1谈谈对java平台的理解1
资源推荐
资源详情
资源评论
极客时间 | Java核心技术36讲
https://time.geekbang.org/column/article/6845[2018/7/6 9:30:29]
第1
讲
|
谈谈
你
对
Java平台的理解?
2018-05-05 杨晓峰
第
1
讲
|
谈谈
你
对
Java
平台的理解?
朗读人:黄洲君 08′03′′ | 3.69M
从你接触 Java 开发到现在,你对 Java 最直观的印象是什么呢?是它宣传的 “Write once, run
anywhere”,还是目前看已经有些过于形式主义的语法呢?你对于 Java 平台到底了解到什么程
度?请你先停下来总结思考一下。
今天我要问你的问题是,谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗?
典型回答
Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运
行”(Write once, run anywhere),能够非常容易地获得跨平台能力;另外就是垃圾收集(GC,
Garbage Collection),Java 通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况
下,程序员不需要自己操心内存的分配和回收。
我们日常会接触到 JRE(Java Runtime Environment)或者 JDK(Java Development Kit)。
JRE,也就是 Java 运行环境,包含了 JVM 和 Java 类库,以及一些模块等。而 JDK 可以看作是
JRE 的一个超集,提供了更多工具,比如编译器、各种诊断工具等。
极客时间 | Java核心技术36讲
https://time.geekbang.org/column/article/6845[2018/7/6 9:30:29]
对于“Java 是解释执行”这句话,这个说法不太准确。我们开发的 Java 的源代码,首先通过
Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚拟机(JVM)内嵌的解释器
将字节码转换成为最终的机器码。但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK 提供
的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能
够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行
了。
考点分析
其实这个问题,问得有点笼统。题目本身是非常开放的,往往考察的是多个方面,比如,基础知识
理解是否很清楚;是否掌握 Java 平台主要模块和运行原理等。很多面试者会在这种问题上吃亏,
稍微紧张了一下,不知道从何说起,就给出个很简略的回答。
对于这类笼统的问题,你需要尽量表现出自己的思维深入并系统化,Java 知识理解得也比较全面,
一定要避免让面试官觉得你是个“知其然不知其所以然”的人。毕竟明白基本组成和机制,是日常
工作中进行问题诊断或者性能调优等很多事情的基础,相信没有招聘方会不喜欢“热爱学习和思
考”的面试者。
即使感觉自己的回答不是非常完善,也不用担心。我个人觉得这种笼统的问题,有时候回答得稍微
片面也很正常,大多数有经验的面试官,不会因为一道题就对面试者轻易地下结论。通常会尽量引
导面试者,把他的真实水平展现出来,这种问题就是做个开场热身,面试官经常会根据你的回答扩
展相关问题。
知
识扩
展
回归正题,对于 Java 平台的理解,可以从很多方面简明扼要地谈一下,例如:Java 语言特性,包
括泛型、Lambda 等语言特性;基础类库,包括集合、IO/NIO、网络、并发、安全等基础类库。
对于我们日常工作应用较多的类库,面试前可以系统化总结一下,有助于临场发挥。
或者谈谈 JVM 的一些基础概念和机制,比如 Java 的类加载机制,常用版本 JDK(如 JDK 8)内嵌
的 Class-Loader,例如 Bootstrap、 Application 和 Extension Class-loader;类加载大致过
程:加载、验证、链接、初始化(这里参考了周志明的《深入理解 Java 虚拟机》,非常棒的 JVM
上手书籍);自定义 Class-Loader 等。还有垃圾收集的基本原理,最常见的垃圾收集器,如
SerialGC、Parallel GC、 CMS、 G1 等,对于适用于什么样的工作负载最好也心里有数。这些都
是可以扩展开的领域,我会在后面的专栏对此进行更系统的介绍。
当然还有 JDK 包含哪些工具或者 Java 领域内其他工具等,如编译器、运行时环境、安全工具、诊
断和监控工具等。这些基本工具是日常工作效率的保证,对于我们工作在其他语言平台上,同样有
所帮助,很多都是触类旁通的。
下图是我总结的一个相对宽泛的蓝图供你参考。
极客时间 | Java核心技术36讲
https://time.geekbang.org/column/article/6845[2018/7/6 9:30:29]
不再扩展了,回到前面问到的解释执行和编译执行的问题。有些面试官喜欢在特定问题上“刨根问
底儿”,因为这是进一步了解面试者对知识掌握程度的有效方法,我稍微深入探讨一下。
众所周知,我们通常把 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)。这里不再展开更多 JIT 的细节,没必要一下子就钻进去,我会在后面介
绍分层编译的内容。
Java 虚拟机启动时,可以指定不同的参数对运行模式进行选择。 比如,指定“-Xint”,就是告诉
JVM 只进行解释执行,不对代码进行编译,这种模式抛弃了 JIT 可能带来的性能优势。毕竟解释器
(interpreter)是逐条读入,逐条解释运行的。与其相对应的,还有一个“-Xcomp”参数,这是
告诉 JVM 关闭解释器,不要进行解释执行,或者叫作最大优化级别。那你可能会问这种模式是不
是最高效啊?简单说,还真未必。“-Xcomp”会导致 JVM 启动变慢非常多,同时有些 JIT 编译器
优化方式,比如分支预测,如果不进行 profiling,往往并不能进行有效优化。
剩余11页未读,继续阅读
资源评论
尹子先生
- 粉丝: 19
- 资源: 324
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
- Linux线程同步机制深度解析与实用指南.zip
- PTA题库C语言解题策略与实战.rar
- SVPWM控制技术的simulink建模与仿真【包括simulink模型,参考文献,操作步骤】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功