JAVA EE初阶 JVM

JVM

Java是一个跨平台的语言,可以不加修改在任何操作系统中运行。

JVM运行流程

代码编译之后生成了什么文件?

java文本文件 ---> class字节码文件,最终会在JVM中执行。

class文件怎么被JVM加载并运行?

JVM运行时数据区

JVM运行时数据区包括:堆,Java虚拟机栈,本地方法栈,程序计数器,方法区。

方法区(内存共享)

保存的就是类对象(new 对象的模版)

方法区是JVM中的规范。JDK7的实现中称为永久代,JDK8的实现中称为元空间。区别在于管理内存的方式不同。

因为存放的是公共的数据,那么所有的线程都可以访问这个区域。

堆(内存共享)

在代码中使用new关键词创建的对象,全都在堆区(内存空间)

JVM内存使用最大的一个内存区域,默认程序最大的运行内存是本机的8/1。

我们常见的JVM参数设置 -xms10m 最小启动内存是针对堆的,-Xmx10m 最大运行内存也是针对堆的。

ms是memory start的简称,mx是memory max的简称。

Java虚拟机栈(线程私有)

Java虚拟机栈的作用:Java虚拟机栈的生命周期和线程相同。

每创建一个线程都会在内存中创建一个与之对应的Java虚拟机栈

本地方法栈

调用本地方法时使用的栈

程序计数器(线程私有)

记录当前线程执行到哪一行,下次回到CPU的时候从计数器位置开始执行。

JVM类加载的过程

加载

在当前的classpath(当前的根目录)下找到所有的class文件,读取到内存中

验证

验证class文件是否符合JVM的规范

准备

为类中定义的静态变量分配内存并设置变量初始值

public static int value = 666;

它是初始化value的int值为0 ,而非666。

解析

解析阶段是Java虚拟机将常量池内的符号引用替换为直接引用的过程,也就是初始化常量的过程。

初始化

new 对象的过程,执行构造方法,以及父类的构造方法。

相关推荐
weixin_3993806932 分钟前
TongWeb7.0.4.9M11一键安装脚本(by sy)
java·spring
CallFay云起未来38 分钟前
AI客服能不能减少人工回复?从重复咨询到人机协同的落地分析
java·大数据·人工智能·文心一言
我命由我1234542 分钟前
Android 开发 - 获取当前设备屏幕的旋转角度
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
Elastic 中国社区官方博客1 小时前
OpenTelemetry Java 扩展:无需分叉 agent 即可自定义追踪
java·大数据·运维·开发语言·数据库·人工智能·elasticsearch
京东云开发者1 小时前
上游给空、下游拿到 -1,我把故障一直追到了 commons-beanutils 的构造函数
java·ai编程
阿无,1 小时前
Java多线程面试题之AQS
java·开发语言
数据狐(Datafox)1 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 15
java·spring boot·笔记
风尘小子2 小时前
java静态类使用@Value动态绑定环境变量
java
重生之后端学习2 小时前
239. 滑动窗口最大值[困难]✅
java·数据结构·算法·leetcode·职场和发展