JVM宏观认知&&内存结构
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宏观认知&&内存结构的更多相关文章
- JVM之--Java内存结构(第一篇)
最近在和同事朋友聊天的时候,发现一个很让人思考的问题,很多人总觉得JVM将java和操作系统隔离开来,导致很多人不用熟悉操作系统,甚至不用了解JVM本身即可完全掌握Java这一门技术,其实个人的观点是 ...
- JVM原理及内存结构
JVM是按照运行时数据的存储结构来划分内存结构的,JVM在运行java程序时,将它们划分成几种不同格式的数据,分别存储在不同的区域,这些数据统一称为运行时数据.运行时数据包括java程序本身的数据信息 ...
- JVM运行时内存结构学习
学习JVM运行模型比较重要,先看一幅图片: 运行时数据区(内存结构) : 1.方法区(Method Area)类的所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在这里定义.简单来说,所 ...
- JVM(二) 栈内存结构
栈内存是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表.操作数栈.动态链接.返回出口等信息.每一个方法从调用直至执行完成的过程,就对应 ...
- jvm(1):内存结构
JVM内存结构 JVM内存的运行时数据区: 线程私有(在线程启动时创建) 程序计数器Program Counter Register 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器, ...
- jvm系列二内存结构
二.内存结构 整体架构 1.程序计数器 作用 用于保存JVM中下一条所要执行的指令的地址 特点 线程私有 CPU会为每个线程分配时间片,当当前线程的时间片使用完以后,CPU就会去执行另一个线程中的代码 ...
- 【JVM】JVM 概述、内存结构、溢出、调优(基础结构+StringTable+Unsafe+ByteBuffer)
什么是 JVM ? 定义 Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处 一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界 ...
- 【高频Java面试题】简单说说JVM堆的内存结构和GC回收流程
目录 前言 JVM堆内存结构简述 JVM堆内存结构图 堆初体验 结构详情 新生代 老年代 永久代/元空间 GC回收流程 GC回收流程图 GC回收详细流程 查看JDK自带可视化堆空间图 总结 前言 我们 ...
- JVM学习之 内存结构
目录 一.引言 1.什么是JVM? 2.学习JVM有什么用 3.常见的JVM 4.学习路线 二.内存结构 1. 程序计数器 1.1 定义 1.2作用 2. 虚拟机栈 2.1定义 2.2栈内存溢出 2. ...
随机推荐
- Python实现ParseDuration-支持解析字符串格式的时间单位,例如将小时或者分钟数转换为秒
python的time模块不支持单独将字符串格式的分钟数和小时数转换为秒,比如将“5m”转换为“300”(秒),不支持将“0.2h5.1m12.123s”转换为“1038.123”(秒). 但是这种字 ...
- git基础学习
1.git是什么 内容寻址文件系统,分布式版本控制系统 2.git作用 开发过程中的版本控制 3.git基础命令 克隆git仓库---clone:git clone 仓库url 选分支---check ...
- vue 初始化table数据,数据闪现的问题
使用的iview,很简单的一个table,可以扩展显示,我这里则是更改了一下,显示的也是表格,内容为明细数据. 原以为很简单的可以直接调用方法,进行数据的渲染,但是没想到,数据只是一闪而过. 百思不得 ...
- Mac OS 安装mysqlclient 遇到的坑~
最近在学习Python, 因为Django连接mysql 需要安装mysqlclient, 但Mac安装遇到各种问题,这里记录一下,避免以后再踩坑. 1. 正常情况下,安装mysqlclient ...
- TensorFlow学习笔记——深层神经网络的整理
维基百科对深度学习的精确定义为“一类通过多层非线性变换对高复杂性数据建模算法的合集”.因为深层神经网络是实现“多层非线性变换”最常用的一种方法,所以在实际中可以认为深度学习就是深度神经网络的代名词.从 ...
- WPF后台设置颜色字体等
Button TempButton = new Button(); TempButton.Tag = “按 ...
- 夯实Java基础(四)——面向对象之多态
1.多态介绍 面向对象三大特征:封装.继承.多态.多态是Java面向对象最核心,最难以理解的内容.从一定角度来看,封装和继承几乎都是为多态而准备的. 多态就是指程序中定义的引用变量所指向的具体类型和通 ...
- 编码规范 | Java函数优雅之道(上)
导读 随着软件项目代码的日积月累,系统维护成本变得越来越高,是所有软件团队面临的共同问题.持续地优化代码,提高代码的质量,是提升系统生命力的有效手段之一.软件系统思维有句话“Less coding, ...
- 素数筛法(Eratosthenes筛法)
介绍 Eratosthenes筛法,又名埃氏筛法,对于求1~n区间内的素数,时间复杂度为n log n,对于10^6^ 以内的数比较合适,再超出此范围的就不建议用该方法了. 筛法的思想特别简单: 对于 ...
- HlpViewer.exe 单独打开
1.在桌面新建一个快捷键 2.添加HlpViewer.exe 的本地地址 3.在添加的地址后面添加 /catalogName VisualStudio12 4.保存快捷键即可 列: 桌面右键-> ...