java内存数据被篡改_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虚拟机) 一次编写,到处运行!

95145e49a7768dcb2a46c3503ea0056a.png

学jvm的目就是:

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

面试!面试!还是面试!

JVM是怎么玩的

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

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

运行时数据区

707ce7495f592fe0e179e582c65c2486.png

JVM运行时数据区

线程私有

程序计数器

虚拟机栈

本地方法栈

线程共享

列表项目

方法区

ae9a99befc74b47f5e16166cc2ca41df.png

BAT的JVM面试题

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

9e7ae514dd6af6d12e720186da3f0f01.png

JVM中一次完整的GC流程是怎样的?

GC——垃圾回收

完整意味着有多种情况

程序计数器

指向当前线程正在执行的字节码指令的地址(行号)

栈是什么?

栈(Stack)

入口和出口只有一个

入栈

出栈

FILO

先进后出

0ad17c1ade1a7a9b93a6e42a9fc22025.png

虚拟机栈

虚拟机栈

创建一个线程就为线程分配一个虚拟机栈,它又会包含多个栈帧,因为每运行一个方法就创建一个栈帧。

运行时才有数据

栈帧

运行一个线程中的一个方法

1.局部变量表

2.操作数栈

3.动态连接

4.返回地址

9e4c82d221fc65469cfea9e680af0101.png

深入理解虚拟机栈

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

代码:

public int calc(){

int a=100;

int b=200;

int c=300;

return(a+b)*c;

}

01ea8e5392bb3422a95c7500462bcfe4.png

虚拟机栈的异常

StackOverFlowError异常

原因:执行的虚拟机栈深度大于虚拟机栈允许的最大深度(方法的递归调用)。

解决办法:增加默认栈的容量。

栈容量 -Xss 默认1M

OutOfMemeoryError异常

原因:多线程环境下虚拟机在扩展栈时无法申请到足够的内存空间。

解决办法:减少默认栈的容量来换取更多的线程支持。

2b4402fd71bad235d0fadd4c5a4a65d5.png

JVM中线程共有的内存区域

Java堆

Java堆是被所有线程共享的一块内存区域

所有的对象实例以及数组要在堆上分配

元数据区

老版本名称:方法区(永久代)

类信息、常量、编译后的代码信息

直接内存

6e8264e0ae891811212980840ae10c7e.png

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

可达性分析算法——GC Roots

JVM中的堆

新生代为什么分三个区?

新生代对象的分配和回收

老年代对象的分配和回收

JVM中一次完整的GC流程是怎样的?

**如果有兴趣想了解视频具体内容的可以关注我,加入我的合作群(805685193)即可获取原视频。

还有一些Java架构视频讲解,需要获取Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思维导图,和BATJ面试题及答案的,都是免费分享的。

关注我,加入我的合作群(805685193)即可获取视频。**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值