Java程序员:不识Jvm真面目,只缘身在增删查改中

发布时间:2019-11-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java程序员:不识Jvm真面目,只缘身在增删查改中脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的字节码程序。

java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。

这里就给大家讲一下JVM。

大咖带你垂直打击JVM

什么是运行时数据区? 我们一起来分享。
了解JVM底层原理,让你的代码撸得飞起。
搞定内存溢出,涨薪升职。
涨见识,字节码执行过程分析。
直击真相,原理和代码全都有。
测试、效果演示及总结。

JVM是什么

JDK: java development kIT (Java开发工具包) 编译、反编译、调试等。

JRE: java runtime enviroment (Java运行环境)

JVM: java Virtual Mechinal (Java虚拟机) 一次编写,到处运行!

Java程序员:不识Jvm真面目,只缘身在增删查改中

学jvm的目就是:

提升代码质量、解决项目问题。

面试!面试!还是面试!

JVM是怎么玩的

类加载器:Class字节码文件加载到内存

执行引擎:解析字节码指令,得到执行结果

运行时数据区

Java程序员:不识Jvm真面目,只缘身在增删查改中

JVM运行时数据区

线程私有
程序计数器
虚拟机栈
本地方法栈
线程共享

  • 列表项目

方法区

Java程序员:不识Jvm真面目,只缘身在增删查改中

BAT的JVM面试题

JVM什么情况下会发生栈内存溢出?

Java程序员:不识Jvm真面目,只缘身在增删查改中

JVM中一次完整的GC流程是怎样的?
GC——垃圾回收
完整意味着有多种情况
程序计数器
指向当前线程正在执行的字节码指令的地址(行号)

栈是什么?

栈(Stack)
入口和出口只有一个
入栈
出栈

FILO
先进后出

Java程序员:不识Jvm真面目,只缘身在增删查改中

虚拟机栈

虚拟机栈
创建一个线程就为线程分配一个虚拟机栈,它又会包含多个栈帧,因为每运行一个方法就创建一个栈帧。
运行时才有数据
栈帧
运行一个线程中的一个方法
1.局部变量表
2.操作数栈
3.动态连接
4.返回地址

Java程序员:不识Jvm真面目,只缘身在增删查改中

深入理解虚拟机栈

演示一段代码的方法的执行过程

代码: