当前位置: 首页 > news >正文

JVM-基础知识

JVM-基础知识

什么是JVM

  1. JVM是一种跨语言的平台,任何语言只要能编译成.class文件都可以被JVM运行。
  2. JVM只和.class文件有关系,和Java语言没关系。
  3. JVM是一种虚拟机规范。

java文件是如何交给JVM执行的

请添加图片描述

JVM的常见实现

  1. HostStop:Oracle官方
  2. 另外还有IBM的J9、Microsoft VM、TaoBaoVM、azul zing(收费)。

堆、栈

  1. 栈和堆是内存中的进程的结构
  2. 一个线程一个栈,这个线程中的每个方法是一个栈贞
  3. 栈中存储的是堆中内存的地址
  4. 栈内存空间在方法弹栈后自动消失,而堆内存空间需要手动管理,这就导致栈贞弹出时候,但是其指向堆中的内存空间是无法被释放

栈帧

每个方法对应一个栈帧, 其中包括:

  1. Local Variable Table:局部变量表。存储方法中的局部变量,包括形参
  2. Operand Stack:操作数堆栈
  3. Dynamic Linking:指向性JVM运行时常量池
  4. return address: 方法返回值地址

栈上分配和线程本地分配(TLAB)

触发的情况
  1. 线程私有且小对象
  2. 无逃逸,即方法内部的变量,无方法外部引用
  3. 标量替换,即可以用少了的基本数据类型、引用类型等可以代替整个对象
线程本地分配(TLAB)

全称ThreadLocal Allocation Buffer,在edne区大约占用1%的内存归线程独有空间,多线程下不必争抢堆内存空间,提高效率。

JVM运行时数据区(RunTimeDateArea)

包括以下几部分:

  1. PC-程序计数器:存放指令的位置,cup执行就是不停的在PC中取指令执行,直到指令被执行完,每个线程一个。
  2. JVM stacks-JVM的栈:存放栈帧,每个线程一个
  3. native method stacks-本机方法栈: C/C++中的栈,本地方法栈,每个线程一个
  4. heap-堆:线程共享
  5. method area-方法区: 包括JVM运行时常量池,线程共享
  6. DirectMemory-直接内存区:直接内存区,JDK1.4后新增,可直接访问内核空间内存,NIO实现零拷贝

JVM内存关系

  1. 堆内存:分为年轻代,老年代
  2. 非堆内存:只包含永久代,即方法区的实现,存储的是程序运行时长期存活的对象,比如类的元数据、方法、常量、属性等。
  3. 1.8之前方法区的实现为PermGen,jdk1.8开始方法区的实现为MetaSpace。
  4. 在jdk1.8废弃了永久代,使用元空间(MetaSpace)取而代之,元空间存储的对象与永久代相同,区别是:元空间并不在jvm中,使用的是本地内存。
  5. 在jdk1.8,字符串常量池已经从永久代移动到了堆中
http://www.lryc.cn/news/374362.html

相关文章:

  • 保密工作应党而生、伴党而行、为党而兴
  • docker login 报错: http: server gave HTTP response to HTTPS client
  • 「C系列」C 文件读写
  • 编程中的cos:深度解析与应用探索
  • 计算机毕业设计hadoop+spark+hive知识图谱酒店推荐系统 酒店数据分析可视化大屏 酒店爬虫 高德地图API 酒店预测系统 大数据毕业设计
  • 简单谈谈云服务器私网IP的存在意义及优势
  • python错题(2)
  • 禁止methtype联网
  • 【iOS】UI学习——cell的复用及自定义cell
  • 【详细介绍下PostgreSQL】
  • 基于Matlab停车场车牌识别计时计费管理系统 【W2】
  • 码住!详解时序数据库不同分类与性能对比
  • 【C/C++】实参与形参的区别
  • ---异常---
  • python如何终止程序运行
  • 网络:用2个IP地址描述一个连接
  • Nodejs--构建web应用
  • C++ 二分查找法【面试】
  • 【Docker】docker-compose常用的构建docker容器的yml文件
  • 华为坤灵路由器初始化开局的注意事项,含NAT配置
  • HTTP!!!
  • Mybatis用Map接收返回值可能出现的问题
  • Web爬虫--fofa-资产信息搜集
  • mySql的事务(操作一下)
  • UniApp或微信小程序中scroll-view组件使用show-scrollbar在真机Android或IOS中隐藏不了滚动条的解决办法
  • 每天五分钟深度学习框架pytorch:多维tensor向量在某一维度的拼接和分割
  • 从C语言到C++(五)
  • 数据结构——栈(Stack)详解
  • 1.Element的table表高度自适应vue3+js写法
  • 联想电脑电池只能充到80%,就不在充电了,猛一看以为坏了,只是设置了养护模式。