目录
- 1、执行引擎的工作过程
- 2、java代码编译和执行的过程
- 3、什么是解释器,什么是编译器
- 4、为什么说java是半编译半解释型语言
- 5、机器码、指令、汇编语言、高级语言
- 6、HotSpot JVM执行方式
- 7、JIT编译器
- 8、方法调用计数器
前言
大家好,我是苍何。最近思考了一个问题,为什么会出现公司面试造火箭,工作扭螺丝的现象,包括各种八股文的连环大绝杀问到你不会为主,其实这是考察你的知识面以及掌握的深度,而为什么需要这样呢?归其原因,无非是通过筛选找到那些会思考的人,他们需要的并不是CRUD的工具人,而是会思考能创新的工程师。
当你深刻理解到这点,我想不用刻意去学习,在工作中,肯定会吾日三省吾身。
于是乎,这个重新开始学习编程系列文章出来了。
愿与君共勉!
这是JVM系列文章的第二篇,主要是JVM执行引擎、对象实例化、String相关知识。
一、JVM执行引擎
执行引擎就是执行内存中的指令,将字节码指令解释/编译为对应平台上的本地机器指令,充当了将高级语言翻译为机器语言的使者。
1、执行引擎的工作过程
2、java代码编译和执行的过程
3、什么是解释器,什么是编译器
4、为什么说java是半编译半解释型语言
5、机器码、指令、汇编语言、高级语言
6、HotSpot JVM执行方式
7、JIT编译器
8、方法调用计数器
二、对象实例化
1、创建对象的方式及创建对象步骤
指针碰撞:如果内存是规整的,那么虚拟机将采用的是指针碰撞法来为对象分配内存,用过的内存在一边,没用过的内存在另一边,中间有个指针,分配内存只需要移动指针即可。
2、对象内存布局
对象头里主要包含运行时元数据和类型指针,运行时元数据含GC分代年龄,锁状态标识、哈希值等
3、对象的访问定位
句柄访问:
堆中维护一个句柄池,对象的移动、只需改变句柄的指针值即可,不需要改变栈中的对象引用,效率要低一些
**直接指针:*
三、String相关知识
1、String的基本特性
2、string的内存分配
JDK7及以后的版本字符创常量池在堆中,JDK7之前字符创常量池在永久代中。
3、字符串的拼接操作
整体而言,常量与常量相加,拼接结果放在常量池,只要其中有一个是变量,结果就在堆中
4、intern()的使用
对于程序中大量存在的字符串,尤其存在很多重复的字符串,使用intern()可以大大提高性能