JVM宏观认知

1.什么是虚拟机?

虚拟机是一种软件

可分为系统虚拟机(仿真物理机)和程序虚拟机(执行单个计算机程序,比如JVM)。

2.什么是Java虚拟机(JVM)?

JVM是一种将字节码转化为机器码的软件。(同上)

历经时间的迭代,目前广泛应用的Java虚拟机是Oracle的HotSpot VM。

3.JVM有什么用?

  • 理论:加深对Java底层运行机制的了解和认知
  • 实践:自定义性能更强的JVM(参数调优),排查由于Java应用本身导致的线上问题(调优主要是调堆)

JDK的发布版本了解一下

  • 1991.4 :Java语言前身Oak诞生
  • 1995.5:Oak语言改名为Java
  • 1996.1:JDK1.0发布,代表技术包括JVM,Applet,AWT

    • Applet是一种Java程序,需要嵌入在HTML中解释执行
    • AWT是早期的抽象窗口工具包,目前流行的有Swing,JavaFx
  • 1997.2:JDK1.1发布,代表技术有JAR文件格式,JDBC,内部类,反射
  • 2002.2:JDK1.4发布,新的技术有正则表达式,NIO,日志类

    • 正则表达式是对字符串操作的一种逻辑格式
    • NIO在IO的基础上增加了缓冲区,是一种非阻塞式的IO模型
  • 2004.9:JDK1.5发布,新的技术有自动装箱,泛型,注解,枚举,foreach循环
  • 2006.11:Sun公司宣布将Java开源,并建立了OpenJDK组织对源码进行管理。
  • 2009.4:Oracle以74亿美元收购Sun公司。
  • 2014.3:Oracle发布JDK1.8,新的特性有Lambda表达式,Stream API
  • 2017.9:JDK9发布,新特性有模块化系统,可交互的REPL工具,JIT,JVMCI等等
  • 2018.3:JDK10发布,新特性包括JEP286局部变量的类型推断,JEP317向G1引入Full GC
  • 2018.9:JDK11发布,新特性包括基于嵌套的访问控制,JavaFx被移除【JDK1.8有】
  • 2019.3:JDK12发布,新特性有低暂停时间的GC,微基准测试套件,Switch表达式。

......


JVM内存结构

JVM内存结构也称为「运行时数据区」。

线程公有:

  • Java堆:存放Java实例对象,生命周期和JVM一致
  • 方法区:存储已被虚拟机加载的类信息、final修饰的常量、static修饰的静态变量。
  • 运行时常量池:是方法区的一部分,存放字面量与符号引用。
    • 字面量可以理解为实际值,int a = 8中的8 和 String a = "hello"中的hello都是字面量
    • 符号引用是一个字符串,对应唯一的类,方法,或者字段。

线程私有:

  • 程序计数器:每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令
  • 虚拟机栈:描述Java方法执行的过程内存是如何变化的。
    • 每执行一个方法就会往栈中压入一个元素,这个元素叫“栈帧”用于存储局部变量表栈的出入信息以及方法出口信息等。
    • 生命周期和线程相同,线程结束自动释放内存,不需要垃圾回收。
  • 本地方法栈:为虚拟机使用到的Native方法服务。Native底层是C语言编写的,用于和操作系统交互。

JVM宏观认知&&内存结构的更多相关文章

  1. JVM之--Java内存结构(第一篇)

    最近在和同事朋友聊天的时候,发现一个很让人思考的问题,很多人总觉得JVM将java和操作系统隔离开来,导致很多人不用熟悉操作系统,甚至不用了解JVM本身即可完全掌握Java这一门技术,其实个人的观点是 ...

  2. JVM原理及内存结构

    JVM是按照运行时数据的存储结构来划分内存结构的,JVM在运行java程序时,将它们划分成几种不同格式的数据,分别存储在不同的区域,这些数据统一称为运行时数据.运行时数据包括java程序本身的数据信息 ...

  3. JVM运行时内存结构学习

    学习JVM运行模型比较重要,先看一幅图片: 运行时数据区(内存结构) :  1.方法区(Method Area)类的所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在这里定义.简单来说,所 ...

  4. JVM(二) 栈内存结构

    栈内存是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表.操作数栈.动态链接.返回出口等信息.每一个方法从调用直至执行完成的过程,就对应 ...

  5. jvm(1):内存结构

    JVM内存结构 JVM内存的运行时数据区: 线程私有(在线程启动时创建) 程序计数器Program Counter Register 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器, ...

  6. jvm系列二内存结构

    二.内存结构 整体架构 1.程序计数器 作用 用于保存JVM中下一条所要执行的指令的地址 特点 线程私有 CPU会为每个线程分配时间片,当当前线程的时间片使用完以后,CPU就会去执行另一个线程中的代码 ...

  7. 【JVM】JVM 概述、内存结构、溢出、调优(基础结构+StringTable+Unsafe+ByteBuffer)

    什么是 JVM ? 定义 Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处 一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界 ...

  8. 【高频Java面试题】简单说说JVM堆的内存结构和GC回收流程

    目录 前言 JVM堆内存结构简述 JVM堆内存结构图 堆初体验 结构详情 新生代 老年代 永久代/元空间 GC回收流程 GC回收流程图 GC回收详细流程 查看JDK自带可视化堆空间图 总结 前言 我们 ...

  9. JVM学习之 内存结构

    目录 一.引言 1.什么是JVM? 2.学习JVM有什么用 3.常见的JVM 4.学习路线 二.内存结构 1. 程序计数器 1.1 定义 1.2作用 2. 虚拟机栈 2.1定义 2.2栈内存溢出 2. ...

随机推荐

  1. linux初学者-磁盘配额篇

    linux初学者-磁盘配额篇 在使用磁盘时,只要有权限,不管什么用户都可以在其中写入数据,但是如果是多人在一个磁盘中写入数据,就会出现争议,如果一个用户将磁盘空间用完,那么其他人无法再使用.如下图所示 ...

  2. AQS原理浅析

    锁是最常用的同步方法之一,在高并发的环境下激烈的锁竞争会导致程序的性能下降,所以我们自然有必要深入的学习一下锁的相关知识. java的内置锁一直都是备受争议的,在JDK 1.6之前,synchroni ...

  3. pycharm与monkeyrunner测试

      操作命令: 导包: import sysfrom com.android.monkeyrunner import MonkeyRunner,MonkeyDevice  device=MonkeyR ...

  4. Golang Context 包详解

    Golang Context 包详解 0. 引言 在 Go 语言编写的服务器程序中,服务器通常要为每个 HTTP 请求创建一个 goroutine 以并发地处理业务.同时,这个 goroutine 也 ...

  5. 4. 源码分析---SOFARPC服务端暴露

    服务端的示例 我们首先贴上我们的服务端的示例: public static void main(String[] args) { ServerConfig serverConfig = new Ser ...

  6. v-text,v-html等区别

    首先我们知道vue中有很多自定义指令,以v- 开头,例如:v-text,v-bind,v-model, v-if,等 在这些指令中,部分指令之间是很容易被混淆,所以今天决定自己总结一下以下几个相似指令 ...

  7. 在vue项目中引入阿里图标库小记

    使用Vue技术栈开发不仅效率高,而且很友好,而且还有很多基于vue的UI框架,例如:element等,但是这类框架美中不足的是,图标太少.为了解决这个问题,不得不引入第三方字体库,今天以阿里图标库为例 ...

  8. vscode c 语言 win10

    在看 CSAPP 一些课程,一些c 语言的小程序的例子,想跑起来试试,用一个DEV  c++  简单上手,但这是一个上古的IDE, 前端开发中的代码不全,语法高亮,都不太好,就想着为什么不折腾一下 V ...

  9. Kafka集群配置---Windows版

    Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,Kafka对消息进行保存时是通过tipic进行分组的.今天我们仅实现Kafka集群的配置.理论的抽空在聊 前言 最近研究kafka,发现网上很多 ...

  10. Tomcat源码分析 (四)----- Pipeline和Valve

    在 Tomcat源码分析 (二)----- Tomcat整体架构及组件 中我们简单分析了一下Pipeline和Valve,并给出了整体的结构图.而这一节,我们将详细分析Tomcat里面的源码. Val ...