当前位置:网站首页>JVM概述和内存管理(未完待续)
JVM概述和内存管理(未完待续)
2022-07-27 17:07:00 【斯沃福德】
这里写目录标题
一. JVM概述
1. Java代码的运行过程

- 首先代码会被javac编译器 编译 成.class字节码(类的基本信息、常量池、方法定义)存于方法区;
- 然后字节码被JVM通过(方法区的)类加载器进行 加载 到方法区(元空间);
- 接着字节码中的方法定义中的虚拟机指令被解释器 解释 成机器码(根据不同的平台生成不同的机器码),这个过程会去常量池中查表;
- 然后分配执行这段指令需要的资源—主要是内存。
- CPU执行指令把结果写回内存了
2. Java跨平台运行如何实现 ?

为了实现平台无关性,java的编译器javac并不是将java的源程序直接编译成与平台相关的汇编指令,而是编译成一种中间语言,即java的class字节码文件。
字节码是可以跨平台运行的代码,通过不同平台上的JVM虚拟机生成对应平台(Linux、Windows、Android等)所需要的机器码(JVM运行于硬件层之上,屏蔽各种平台的差异性)
3. JVM 和用户进程的关系 ?
java my.class
运行以上的一个java程序,对应创建JVM 来加载和运行你的 Java 类;
过程:
操作系统会创建一个进程来执行这个java可执行程序,
而每个进程都有自己的虚拟地址空间,
JVM 用到的内存(包括堆、栈和方法区)就是从进程的虚拟地址空间上分配的。

需要注意的是,JVM 内存只是进程空间的一部分,除此之外进程空间内还有代码段、数据段、内存映射区、内核空间等。
JVM 的角度看,JVM 内存之外的部分叫作本地内存;
4. JVM结构

Java源代码编译成二进制字节码,经过类加载器加载到JVM中去运行
类放在方法区,实例对象在堆内存,而堆中的方法在调用时会用到 虚拟机栈、程序计数器、本地方法栈
然后方法执行时的每行代码是由 执行引擎中的解释器进行逐行执行
热点代码会被JIT即时编译器来编译,即优化后的执行
GC会对堆中不再被引用的对象进行回收
还有一些Java不方便实现的,需要调用底层操作系统的功能需要和本地方法接口打交道
二. JVM内存管理

线程私有:
1. 程序计数器
引入:
在JVM的多线程场景下,多个线程分时交替执行,
而同一时刻cpu只执行一条指令,那么就会发生上下文切换,也就是说切换线程时要 ①保存当前线程的指令,②然后恢复下一个线程的指令;
那么就需要每个线程有一个程序计数器,用来记录指令地址,以使得线程切换后恢复到正确的位置;
概念:
程序计数器是线程私有的一块较小的内存空间,看作是当前线程所执行的字节码的行号指示器。
物理上是通过寄存器来实现的,寄存器是cpu组件中读取速度最快的单元。
功能:⽤于记录当前线程执行的位置(当前线程中执行的字节码指令的地址),从⽽当线程被切换回来(上下文切换)的时候能够知道该线程上次运行到哪儿了。
特点:
①线程私有;
②程序计数器是JVM中唯一一个不会出现内存溢出的区域(堆、栈、方法区都可能会内存溢出)
2. 虚拟机栈
概念:
每个线程运行时所需要的内存,称为虚拟机栈。
每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存;
栈帧中存有局部变量表,用于存对象引用、基本数据类型;
但是栈顶只有一个,对应着当前正在执行的那个方法;
每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
虚拟机栈和本地方法栈为什么是私有的 ?
为了保证线程中的局部变量不被别的线程访问到,虚拟机栈和本地⽅法栈是线程私有的。
垃圾回收是否涉及栈内存 ?
不会;
栈内存 存的就是一次次方法调用所产生的栈帧内存,而栈帧内存会随着方法调用结束 栈帧的弹出而释放,所以不需要GC管理。 GC只是回收堆内存中无用的对象。
栈内存分配越大越好吗 ?
可以指定栈内存Xss的大小;
不会。栈越大,反而会让线程数越少。因为物理内存大小是固定的,而栈内存越大,那么线程数就会少! 并不会增加效率。
方法内的局部变量是否线程安全 ?
即看多个线程对这个变量是共享的还是私有的。而局部变量是线程私有的,所以是线程安全的;
而如果局部变量是引用数据类型,并且逃逸出了方法的作用范围,需要考虑线程安全的问题。(而变量是基本数据类型的时候是安全的)
栈溢出:
https://blog.csdn.net/u010515202/article/details/106056592
边栏推荐
- C language: 7. How to use C language multi source files
- OPPO发布首款AR眼镜,宣布未来3年投入500亿进行研发
- 【深度学习基础知识 - 45】机器学习中常用的距离计算方法
- Transaction log full problem handling in sqlserver 2008
- [Huawei cloud stack] [shelf presence] issue 13: have you seen the decoupling architecture of the management area? Help government and enterprise customers solve big problems
- c语言:6、指针的简单使用与注意事项
- Count the six weapons of the domestic interface cooperation platform!
- Intel's process roadmap for the next 10 years is exposed: 1.4nm process will be launched in 2029! How?
- GridView(实现表格显示图标)
- A low code development platform that brings high-value user experience
猜你喜欢

IEC104 规约详细解读(一) 协议结构
Dry goods of technical practice | preliminary exploration of large-scale gbdt training

下放三星3J1传感器:代码暗示Pixel 7人脸识别安全性将大增
![[basic knowledge of deep learning - 43] concept of odds ratio](/img/74/d7d1562ada4671864961721b9a1baf.png)
[basic knowledge of deep learning - 43] concept of odds ratio

A low code development platform that brings high-value user experience

Chinese character search Pinyin wechat applet project source code
![[basic knowledge of deep learning - 45] distance calculation methods commonly used in machine learning](/img/6c/b0c2ea667ac361c13d38c8f5e6e5f1.png)
[basic knowledge of deep learning - 45] distance calculation methods commonly used in machine learning

Embedded C language structure

Map and set

IIS 发生未知FastCGI错误:0x80070005
随机推荐
Debian recaptured the "debian.community" domain name, but it's still not good to stop and rest
influxDB系列(三)influxDB配置文件详解
Uncover the mystery of Qualcomm ultrasonic fingerprint being "cracked by film"
Embedded C language pointer alias
[basic knowledge of deep learning - 37] solve the imbalance between positive and negative samples
【深度学习基础知识 - 37】解决正负样本不均衡 Focal Loss
Publish your own NPM component library
Oppo released the first AR glasses and announced that it would invest 50billion in research and development in the next three years
嵌入式C语言结构体
View pagoda PHP extension directory
应用程序池已被禁用
【深度学习基础知识 - 45】机器学习中常用的距离计算方法
High cost, difficult to implement, slow to take effect, what about open source security?
Optimization of fixed number of cycles in embedded C language
RadioGroup(单选框)
坚持软硬一体化,一恒科发力智能化教育机器人市场
Matplotlib(基本用法)
IEC104 规约详细解读(一) 协议结构
It is said that Apple plans to buy some JDI factories with us $200million
S32K系列芯片--简介