Java编程技术之浅析JVM内存
JVM
JVM->Java Virtual Machine:Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

基本认知:
- 1.JVM是用于运行Java代码的假象计算机,主要有一套字节码指令集,一组寄存器,一个栈,一个垃圾回收,堆 和 一个存储方法域。
- 2.JVM运行在操作系统之上,与硬件没有直接的交互。
Java程序执行过程:

- 1.编译->源文件由编译器编译成字节码[ByteCode]
Java 源文件—->编译器—->字节码文件
- 2.运行->字节码由java虚拟机解释运行
字节码文件—->JVM—->机器码
Java类的加载步骤:
- 1.加载->主要是完成3个阶段的提交:
通过类的全限定名来获取定义类的二进制字节流
将字节流所代表的静态存储结构转化为方法区的运行时数据结构
在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。
- 2.验证->四个阶段的检验动作:
文件格式验证
元数据验证
字节码验证
符号引用验证
- 3.准备->为类变量(static)分配内存并设置类变量的初始值。
- 4.解析->将常量池内的符号引用转为直接的引用
- 5.初始化->按照static块和static变量在文件中的出现顺序,合并到()方法中。实例变量由()函数赋值。
JVM线程实体:
JVM线程->程序执行过程中的一个线程实体,JVM 允许一个应用并发执行多个线程。
从此,我们应该意识到,在Java中,当提到线程就应该是指JVM线程和Java线程。其中JVM线程指的是Hotspot JVM 后台运行的系统线程,而且Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。
️[注意事项]:
[1].当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。
[2].Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把它们分配到任何可用的 CPU 上。
[3].当原生线程初始化完毕,就会调用 Java 线程的 run() 方法。当线程结束时,会释放原生线程和 Java 线程的所有资源
特别需要知道的是,Hotspot JVM 后台运行的系统线程主要是:
- 虚拟机线程->VM thread:等待 JVM 到达安全点操作出现。这些操作必须要在独立的线程里执行,因为当堆修改无法进行时,线程都需要 JVM 位于安全点。这些操作的类型有:stop-theworld垃圾回收、线程栈 dump、线程暂停、线程偏向锁(biased locking)解除。
- 周期性任务线程->负责定时器事件(也就是中断),用来调度周期性操作的执行
- GC线程->支持 JVM 中不同的垃圾回收活动
- 编译器线程->在运行时将字节码动态编译成本地平台相关的机器码
- 信号分发线程->程接收发送到 JVM 的信号并调用适当的 JVM 方法处理
JVM内存

版权声明:本文为博主原创文章,遵循相关版权协议,如若转载或者分享请附上原文出处链接和链接来源。
Java编程技术之浅析JVM内存的更多相关文章
- Java编程技术之浅析SPI服务发现机制
SPI服务发现机制 SPI是Java JDK内部提供的一种服务发现机制. SPI->Service Provider Interface,服务提供接口,是Java JDK内置的一种服务发现机制 ...
- Java编程技术之浅析Java容器技术
Java容器 集合是一种存储数据的容器,是Java开发中使用最频繁的对象类型之一. 或许提起Collection,都会第一时间意识到List和Set以及Map等相关关键词.因为这几乎是我们日常开发里接 ...
- 浅析JVM内存区域及垃圾回收
一.JVM简介 JVM,全称Java Virtual Machine,即Java虚拟机.以Java作为编程语言所编写的应用程序都是运行在JVM上的.JVM是一种用于计算设备的规范,它是一个虚构出来的计 ...
- 如何从编程的本质理解JVM内存模型
如何从编程的本质理解JVM内存模型 一般聊JVM内存模型都是把图截出来,然后对着图,解释上面堆.栈之类的概念.这篇将分享下,如何从编程的本质上理解,JVM内存模型是什么样子,为什么是这个样子,不再死记 ...
- 10个实用的但偏执的Java编程技术
在沉浸于编码一段时间以后,你会渐渐对这些东西习以为常.因为,你知道的-- 任何事情有可能出错,没错,的确如此. 这就是为什么我们要采用"防御性编程",即一些偏执习惯的原因.下面是我 ...
- 转载:10个实用的但偏执的Java编程技术
在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 任何事情有可能出错,没错,的确如此. 这就是为什么我们要采用“防御性编程”,即 ...
- (转载)10个实用的但偏执的Java编程技术
10个实用的但偏执的Java编程技术 在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 作者:小峰来源:码农网|2015-09- ...
- 浅析JVM内存结构和6大区域(转)举例非常好
内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收 ...
- JAVA高级篇(二、JVM内存模型、内存管理之第二篇)
本文转自https://zhuanlan.zhihu.com/p/25713880. JVM的基础概念 JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机. JVM也充 ...
随机推荐
- PAT 1006 Sign In and Sign Out (25分) 字符串比较
题目 At the beginning of every day, the first person who signs in the computer room will unlock the do ...
- clickhouse入门到实战及面试
第一章. clickhouse入门 一.ClickHouse介绍 ClickHouse(开源)是一个面向列的数据库管理系统(DBMS),用于在线分析处理查询(OLAP). 关键词:开源.面向列.联机分 ...
- ASCII码排序(hdu2000)
思考:字符串的输入中是不包含空格的,所以可以用scanf_s("%字符类型占位符",&变量名,整型参数)来输入字符串. 因为scanf_s()函数的输入一遇到空格就会停止输 ...
- Java并发(4)
java中的线程安全是什么: 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问 什么叫 ...
- MySQL事务锁等待超时 Lock wait timeout exceeded; try restarting transaction
工作中处理定时任务分发消息时出现的问题,在查找并解决问题的时候,将相关的问题博客收集整理,在此记录下,以便之后再遇到相同的问题,方便查阅. 问题场景 问题出现的场景: 在消息队列处理消息时,同一事务内 ...
- SQL——处理列中NULL值
处理NULL值 - 数据库中某列为NULL值,使用函数在列值为NULL时返回固定值. SQLServer:ISNULL(col,value) 示例:SELECT ISNULL(co ...
- SQL——SQL别名、UNION和SELECT INTO
Alias(别名) - 为列名称和表名称指定别名 语法:表SELECT columnName(s) FROM tableName AS aliasName 列SELECT co ...
- TCP实现连接传输案例
使用的类 ServerSocket 服务器端 构造方法:ServerSocket(端口号); 接收端使用 方法:accept(); 返回一个 Socket对象 getI ...
- ES[7.6.x]学习笔记(十)聚合查询
聚合查询,它是在搜索的结果上,提供的一些聚合数据信息的方法.比如:求和.最大值.平均数等.聚合查询的类型有很多种,每一种类型都有它自己的目的和输出.在ES中,也有很多种聚合查询,下面我们看看聚合查询的 ...
- S32DS编译程序出现Type region `SRAM' overflowed by 19240 bytes错误
用S32DS编译工程遇到Type region `SRAM' overflowed by 19240 bytes错误(芯片为S9KEAZ64AMLH) 程序中未初始化的变量存放SRAM中 当程序出现未 ...