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

前言

JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操做系统和硬件平台并利用软件方法来实现的抽象的计算机,能够在上面执行java的字节码程序。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虚拟机) 一次编写,处处运行!并发

clipboard.png

学jvm的目就是:jvm

提高代码质量、解决项目问题。分布式

面试!面试!仍是面试!

JVM是怎么玩的

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

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

运行时数据区

clipboard.png

JVM运行时数据区

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

  • 列表项目

方法区

clipboard.png

BAT的JVM面试题

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

clipboard.png

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

栈是什么?

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

FILO
先进后出

clipboard.png

虚拟机栈

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

clipboard.png

深刻理解虚拟机栈

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

代码:

public int calc(){

int a=100;

int b=200;

int c=300;

return(a+b)*c;

}

clipboard.png

虚拟机栈的异常

StackOverFlowError异常
缘由:执行的虚拟机栈深度大于虚拟机栈容许的最大深度(方法的递归调用)。
解决办法:增长默认栈的容量。
栈容量 -Xss 默认1M

OutOfMemeoryError异常
缘由:多线程环境下虚拟机在扩展栈时没法申请到足够的内存空间。
解决办法:减小默认栈的容量来换取更多的线程支持。

clipboard.png

JVM中线程共有的内存区域

Java堆
Java堆是被全部线程共享的一块内存区域
全部的对象实例以及数组要在堆上分配

元数据区
老版本名称:方法区(永久代)
类信息、常量、编译后的代码信息

直接内存

clipboard.png

以上源于一个视频讲解的概述总结,后续将分享后半部分的内容:

可达性分析算法——GC Roots
JVM中的堆
新生代为何分三个区?
新生代对象的分配和回收
老年代对象的分配和回收
JVM中一次完整的GC流程是怎样的?

**若是有兴趣想了解视频具体内容的能够关注我,加入个人合做群(805685193)便可获取原视频。还有一些Java架构视频讲解,须要获取Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思惟导图,和BATJ面试题及答案的,都是免费分享的。关注我,加入个人合做群(805685193)便可获取视频。**

相关文章
相关标签/搜索