乐趣区

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 虚拟机) 一次编写,到处运行!

学 jvm 的目就是:
提升代码质量、解决项目问题。
面试!面试!还是面试!
JVM 是怎么玩的
类加载器:Class 字节码文件加载到内存
执行引擎:解析字节码指令,得到执行结果
运行时数据区

JVM 运行时数据区
线程私有程序计数器虚拟机栈本地方法栈线程共享


列表项目

方法区

BAT 的 JVM 面试题
JVM 什么情况下会发生栈内存溢出?

JVM 中一次完整的 GC 流程是怎样的?GC——垃圾回收完整意味着有多种情况程序计数器指向当前线程正在执行的字节码指令的地址(行号)
栈是什么?
栈(Stack)入口和出口只有一个入栈出栈
FILO 先进后出

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

深入理解虚拟机栈
演示一段代码的方法的执行过程
代码:
public int calc(){

int a=100;

int b=200;

int c=300;

return(a+b)*c;

}

虚拟机栈的异常
StackOverFlowError 异常原因:执行的虚拟机栈深度大于虚拟机栈允许的最大深度(方法的递归调用)。解决办法:增加默认栈的容量。栈容量 -Xss 默认 1M
OutOfMemeoryError 异常原因:多线程环境下虚拟机在扩展栈时无法申请到足够的内存空间。解决办法:减少默认栈的容量来换取更多的线程支持。

JVM 中线程共有的内存区域
Java 堆 Java 堆是被所有线程共享的一块内存区域所有的对象实例以及数组要在堆上分配
元数据区老版本名称:方法区 (永久代) 类信息、常量、编译后的代码信息
直接内存

以上源于一个视频讲解的概述总结,后续将分享后半部分的内容:
可达性分析算法——GC RootsJVM 中的堆新生代为什么分三个区?新生代对象的分配和回收老年代对象的分配和回收 JVM 中一次完整的 GC 流程是怎样的?
** 如果有兴趣想了解视频具体内容的可以关注我,加入我的合作群(805685193)即可获取原视频。还有一些 Java 架构视频讲解,需要获取 Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思维导图,和 BATJ 面试题及答案的,都是免费分享的。关注我,加入我的合作群(805685193)即可获取视频。**

退出移动版