人生若只如初见,何必悲风秋画扇。不知道你是何时第一次与JVM相识,也许是在大学的课本里,也许是一场有点懵逼的面试,也许就是现在。我们不问过去,不谈将来,现在一起重新认识一下JVM吧。
JVM为何物
- 中文名称:Java虚拟机
- 英文名称:Java Virtual Machine
- 简称(小名): JVM
- 爱好:内存管理,线程调度等
- 特长: 一次编译,到处运行
- 百度风评:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
为什么要学习JVM
- 面试官比较讨厌,经常问这一块
- 希望不要挖太多的坑,防止自己掉进去
- 路漫漫其修远兮,吾将上下而求索
学习过程中的痛点
- 总是临阵磨枪,总是看,总是忘。
- 有一块内容总是不清楚,咱也不知道,也不敢问。
- 没有整体的轮廓,总感觉学习的不够完整。
- 感觉这一块很枯燥乏味,从入门到放弃。
简单聊一下我和JVM的相遇
虽然本人大学也是计算机本专业的学生,奈何大学在学习Java语言的时候,老师只讲解基础的语法,而自己也没有主动去摸索,也没有一位指路人让我看到一条明路。而在工作了之后,初期也基本是沉浸于公司固有的框架中做一些业务开发而不能自拔,所以这一块很长时间都没有接触。对于JVM的认知只知道两个字“堆栈”。直到后来在换工作的时候,被问到这一块,有点懵逼。所以后来也是专门去整理了相关的知识点,后来在工作中也有内存调优的经验,所以特意出一个系列来分享给大家,希望大家在学习的路上不孤单,有我在这里陪着你。
这些问题都将是小菜
很多时候,自己写的一些代码,感觉有点心虚,不知道会不会有问题。其实在学习路上始终会有很多的疑问,一定要保持质疑。
- 新起一个线程,为什么主线程还会继续执行
这个问题可能看起来比较幼稚,因为这是我们熟知的事情了,但是你能解释为什么会这样吗?
public static void main(String[] args) {
System.out.println("主线程开始");
new Thread(()->{
int i = 0;
while (true){
i++;
if(i > 5){
break;
}
try {
System.out.println(Thread.currentThread().getName() + "休眠");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
System.out.println("主线程结束");
}
- 下面代码可能的执行结果
public static void main(String[] args) {
int i = 0;
try{
int j = 0 / 0;
i = 1;
}catch (Exception e){
System.out.println("i=" + i);
}
}
- 当显示的执行System.gc()时那一刻发生了什么
public static void main(String[] args) {
System.gc();
}
- 当一个足够大的对象创建时和一个小的对象相比有什么区别。
- 对于JVM来说是否是内存越大越好,当内存扩充了之后,虚拟机参数应当做出哪些调整。
- 什么时候会发生内存泄漏,如果要做缓存,应该如何避免占用内存过大而导致OOM。
- 当看到一段代码之后,是否能够很清晰的清楚其在JVM中数据的存放位置以及代码的执行过程。
- 当写多线程处理的时候,是否会感觉处处都需要加锁,内心慌得一批。
- Tomcat是通过.bat或者.sh中调用bootstrap.java的main方法起来的,对于一个Tomcat中的多个应用来说,它们同属于一个JVM,那么引入相同的jar包,为什么jar包之间不冲突?
- OSGI技术主要是在玩的哪一块?
.......................太多了,就不一一列举了,当你深入的了解了JVM之后,你会感觉如同手持一把98K,基本指哪儿打哪儿。
本片文章是这个系列的引言部分,希望大家能陪我一起学习整个JVM系列,如果内容有误,请留言或者私信,我会做出调整。
Stay hungry,stay foolish.












网友评论