当前位置:网站首页>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
边栏推荐
- DatePicker(日期选择器)与TimePicker(时间选择器)
- IEC104 规约详细解读(二)交互流程以及协议解析
- It is said that Apple plans to buy some JDI factories with us $200million
- Tab control of MFC advanced control (CTabCtrl)
- Pytorch reports CUDA error: no kernel image is available for execution on the device error
- TSMC 5nm is about to mass produce: Apple A14 monopolizes 70% of the production capacity, and Huawei Kirin 1020 takes 30%
- [basic knowledge of deep learning - 45] distance calculation methods commonly used in machine learning
- Map and set
- 估值超156亿元!华勤通讯完成10亿元B轮融资!高通创投、英特尔资本领投
- C language: 7. How to use C language multi source files
猜你喜欢

【深度学习基础知识 - 45】机器学习中常用的距离计算方法

Tab control of MFC advanced control (CTabCtrl)

rxbinding

Use of jvisualvm

C language: 14. Preprocessing

JS 事件监听 鼠标 键盘 表单 页面 onclick onkeydown onChange
![[basic knowledge of deep learning - 37] solve the imbalance between positive and negative samples](/img/71/4052607951eb52862a6fd36366f216.png)
[basic knowledge of deep learning - 37] solve the imbalance between positive and negative samples
![[basic knowledge of deep learning - 46] Bayesian theorem and conditional probability formula](/img/9f/b9d7503404e068495fd8613df29366.png)
[basic knowledge of deep learning - 46] Bayesian theorem and conditional probability formula

GestureOverlayView(手势识别2)

rxbinding
随机推荐
The first in the field of mobile phone chip design in the world! Ziguang zhanrui won the international certification of tmmi4
Golang sets the domestic image, vscode configures the golang development environment, and vscode debugs the golang code
C language: 14. Preprocessing
开启和禁用hyper-v
Transaction log full problem handling in sqlserver 2008
jvisualvm的使用
rxbinding
ContextMenu(上下文菜单)
The go zero singleton service uses generics to simplify the registration of handler routes
Oppo released the first AR glasses and announced that it would invest 50billion in research and development in the next three years
High cost, difficult to implement, slow to take effect, what about open source security?
SumMenuDemo(子菜单)
【深度学习基础知识 - 41】深度学习快速入门学习资料
SharePreference(存储)
Big guys, Oracle CDC, local operation, always encounter this an exception occurred in
记一次无准备的实习面试
c语言:6、指针的简单使用与注意事项
c语言:5、多维数组
Come to sword finger offer 03. Repeated numbers in the array
5W bonus pool / for colleges and universities, 2022 legal science and technology innovation competition is in progress