做者:小傅哥
博客:https://bugstack.cn
Github:https://github.com/fuzhengwei/CodeGuide/wikihtml
沉淀、分享、成长,让本身和他人都能有所收获!😄
截至到这已经写了22篇面经手册,你看了多少?
java
😄其实小傅哥就是借着面经的幌子在讲 Java 核心技术
,探索这些核心知识点面试的背后到底在问什么。git
想问一些面试官,是由于你们都在问因此你问,仍是你想从这里问出什么? 其实可能不少面试官若是不了解这些技术,每每会被求职者的答案击碎心里,哈哈哈哈哈哈。好比:梅森旋转算法
、开放寻址
、斐波那契散列
、启发式清理
、Javassist代理方式
、扰动函数
、哈希一致
等等。程序员
记住,让懂了就是真的懂,比看水文、背答案要爽的多!嗯,就是有时候烧脑!github
谢飞机,小记!
,也不知道咋了,总感受有些面试攻击性不大,但侮辱性极强
!面试
面试官:谢飞机写过 Java 吗?算法
谢飞机:那固然写过,写了3年多了!数据库
面试官:那,JDK
、JRE
、JVM
之间是什么关系?编程
谢飞机:嗯 J J J,JDK 里面有 JRE,JVM 好像在 JRE 里!?小程序
面试官:那,Client模式、Server模式是啥?
谢飞机:嗯!?啥?
面试官:好吧,问个简单的。JVM 是如何工做的?背答案了吗?
谢飞机:再见,面试官!
Oracle has two products that implement Java Platform Standard Edition (Java SE) 8: Java SE Development Kit (JDK) 8 and Java SE Runtime Environment (JRE) 8.JDK 8 is a superset of JRE 8, and contains everything that is in JRE 8, plus tools such as the compilers and debuggers necessary for developing applets and applications. JRE 8 provides the libraries, the Java Virtual Machine (JVM), and other components to run applets and applications written in the Java programming language. Note that the JRE includes components not required by the Java SE specification, including both standard and non-standard Java components.
The following conceptual diagram illustrates the components of Oracle's Java SE products:
Description of Java Conceptual Diagram
关于 JDK、JRE、JVM 之间是什么关系,在 Java 平台标准中已经明肯定义了。也就是上面的英文介绍部分。
综上,从这段官网的平台标准介绍和概念图能够看出,咱们运行程序的 JVM 是已经安装到 JDK 中,只不过可能你开发了好久的代码,也没有注意过。没有注意过的最大缘由是,没有开发过一些和 JVM 相关的组件代码
关于,各 JDK 版本的平台标准,能够自行比对学习,以下:
咱们默认安装完 JDK 会有 jdk1.8.0_45
、jre1.8.0_45
,两个文件夹。其实在 JDK 的文件中还会有 JRE 的文件夹,他们两个 JRE 文件夹的结构是同样的。
jvmti.h
。例如:基于jvmti设计非入侵监控.so
.dll
.dylib
那么 jvm 在哪一个文件夹呢?
可能你以前并无注意过 jvm 原来在这里:C:\Program Files\Java\jdk1.8.0_45\jre\bin\server
综上经过 Java 平台标准
和 JDK 的目录结构
,JDK 是 JRE 的超集,JDK 包含了 JRE 全部的开发、调试以及监视应用程序的工具。以及以下重要的组件:
JRE 自己也是一个运行在 CPU 上的程序,用于解释执行 Java 代码。
通常像是实施的工做,会在客户现场安装 JRE,由于这是运行 Java 程序的最低要求。
其实简单说 JVM 就是运行 Java 字节码的虚拟机,JVM 是一种规范,各个供应商均可以实现本身 JVM虚拟机。就像小傅哥本身也按照虚拟机规范和手写JVM的相关书籍实现了,基于Java实现的JVM虚拟机。
源码地址:https://github.com/fuzhengwei/itstack-demo-jvm
内容简介:本代码主要介绍如何经过 java 代码来实现 JVM 的基础功能(搜索解析class文件、字节码命令、运行时数据区等),从而让java程序员经过最熟知的java程序,学习JVM是如何将java程序一步步跑起来的。
固然,咱们下载 Oracle 公司的 JVM 与本身实现的相比,要高级的多。他们的设计有不断优化的内存模型、GC回收策略、自适应优化器等。
另外,JVM 之因此称为虚拟机,主要就是由于它为了实现 “write-once-run-anywhere”。提供了一个不依赖于底层操做系统和机器硬件结构的运行环境。
在 JVM 中有两种不一样风格的启动模式, Client模式、Server模式。
修改配置模式文件:C:\\Program Files\\Java\\jre1.8.0_45\\lib\\amd64\\jvm.cfg
# List of JVMs that can be used as an option to java, javac, etc. # Order is important -- first in this list is the default JVM. # NOTE that this both this file and its format are UNSUPPORTED and # WILL GO AWAY in a future release. # # You may also select a JVM in an arbitrary location with the # "-XXaltjvm=<jvm_dir>" option, but that too is unsupported # and may not be available in a future release. # -server KNOWN -client IGNORE
这部分属于 JVM 的核心知识,但不是本篇重点,会在后续的章节中陆续讲到。本章只作一些介绍。