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内存

版权声明:本文为博主原创文章,遵循相关版权协议,如若转载或者分享请附上原文出处链接和链接来源。

(0)

相关推荐

  • 2021最新 Java虚拟机(JVM)面试题精选(附刷题小程序)

    推荐使用小程序阅读 为了能让您更加方便的阅读 本文所有的面试题目均已整理至小程序<面试手册> 可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验! 目录 推荐使用小程序阅读 1. J ...

  • JVM之栈 Java Stack

    JVM之栈 Java Stack

  • JVM专栏

    目录 一.JVM内存结构 1.JDK1.8内存结构 JDK1.8与JDK1.7内存结构比较 程序计数器 虚拟机栈 本地方法栈 堆 元空间(Metaspace) 配置参数与异常 2.内存溢出 内存溢出与 ...

  • JAVA内存模型和Happens-Before规则

    前言 上一篇文章王子给大家介绍了并发编程中比较关心的三个核心问题,可见性.有序性和原子性. 今天我们继续来探索并发编程的内容,聊一聊JAVA的内存模型和Happens-Before规则. JAVA内存 ...

  • Java编程技术之浅析Java容器技术

    Java容器 集合是一种存储数据的容器,是Java开发中使用最频繁的对象类型之一. 或许提起Collection,都会第一时间意识到List和Set以及Map等相关关键词.因为这几乎是我们日常开发里接 ...

  • Java编程开发之浅析Java引用机制

    对于一个Java的对象而言,存储主要分为两种,一种是内存堆(Heap),内存堆是无序的,主要用来存放创建的Java对象:一种是内存栈(Stack),主要用来存放Java引用,然后在管理过程使用Java ...

  • ITeye Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on r...

    ITeye Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on r...

  • Java后端编程技术微信群和QQ群

    今天特意写一篇文章来创建个氛围良好的程序员技术交流群.如果你喜欢在QQ群里讨论,可以加程序员技术交流QQ群:882985475 . 如果你已经卸载了QQ了,那么你可以添加下面小助手微信,备注:加群.会 ...

  • java开发技术之synchronized的使用浅析

    synchronized 这个关键字的重要性不言而喻,几乎可以说是并发.多线程必须会问到的关键字了.synchronized 会涉及到锁.升级降级操作.锁的撤销.对象头等.所以理解 synchroni ...

  • 收藏!Java编程技巧之单元测试用例编写流程

    温馨提示:本文较长,同学们可收藏后再看 :) 前言 清代杰出思想家章学诚有一句名言:"学必求其心得,业必贵其专精." 意思是:学习上一定要追求心得体会,事业上一定要贵以专注精深.做 ...

  • 知识干货 | 污染场地技术调查-浅析水文地质调查

    在系统调查场地是否被污染及污染程度和范围的过程中,水文地质调查越来越多地得到使用.技术人员通过借鉴地质行业中已然规范成型的水文地质调查技术方法,并将其与环境科学的专业有机结合,不仅相当程度上丰富了当今 ...

  • 各盐湖提锂技术路浅析,核心概念股一览!

    5月16日,建设世界级盐湖产业基地行动方案编制领导小组第一次会议在西宁召开,审议讨论了<建设世界级盐湖产业基地行动方案(初稿)>,并于5月20日在北京召开国内专家论证会听取对<行动方 ...

  • 西工大21年4月机考随机《数控编程技术》标准资料

    试卷总分:100    得分:100 一. 单选题 (共 20 道试题,共 40 分) 1.世界上第一台数控机床诞生于( )年. A.1930 B.1947 C.1952 D.1958 正确答案:C ...