栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM基础笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM基础笔记

一、自动内存管理 1、JVM 运行时数据区 1.1 Overview

本文为《深入理解Java虚拟机》学习笔记;待更新 … …

  • JDK: Java编程语言+JVM+Java类库;JDK即代表整个Java技术体系
  • JRE:Java类库中的JavaSE API子集+JVM;JRE即支持Java程序运行的标准环境
    运行时数据区一般分为:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区、直接内存
  • 如上图中显示:程序计数器、本地方法栈、Java虚拟机栈为线程私有;堆和方法区为线程共享

本文以HotSpot为基础介绍JVM

1.2 程序计数器
  • 占内存很小,可理解为当前Thread所执行的字节码的行号指示器
  • 字节码解释器工作时就是通过改变这个计数器的值来选取下一条要执行的字节码指令
  • 每条线程都需要有一个独立的程序计数器,因为一个内核任意时刻都只允许一个线程工作,所以程序计数器线程私有可以保证线程切换时恢复到正确执行位置
  • 如果执行的是Java方法,计数器记录的是字节码指令地址;如果是本地方法,计数器值为Undefined
  • 程序计数器是JVM中唯一不会出现OOM的区域
1.3 JAVA虚拟机栈
  • 线程私有,和线程生命周期相同
  • 描述的是方法执行;即每个方法执行时,都会创建一个栈帧
  • 栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等;
  • 局部变量表:存放编译器可知的各种JVM基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用类型(reference类型:不同于对象本身,可以是一个指向对象起始地址的引用指针,也可以是指向对象的句柄)、returnAddress类型
  • 局部变量表中基本数据类型除了long、double占两个slot;其余都占1个slot;局部变量表空间在编译器确定,进入一个方法时,对应栈帧分配多大的空间即多少个slot是确定的
  • 可能出现StackOverFlow、OutOfMemory异常:前者是线程申请的栈深度大于JVM运行的Max栈深度(最大栈深度通过参数设定);OOM是指JVM最大栈深度可扩展,但是没有足够的内存供扩展;注意:HotSpot不允许动态扩展
1.4 本地方法栈

和Java虚拟机栈区别是其执行本地方法;也会SOF、OOM异常

1.5 堆
  • 线程共享:JVM管理的最大的一块内存;几乎所有对象都分配在堆;但由于即时编译技术,特别是栈上分配、逃逸分析、标量替换使得对象不一定分配在堆上
    也称GC堆(Garbage Collection heap),这是因为堆是GC发生的主要区域;分代回收(GC时会介绍)
  • TLAB(Thread Local Allocation Buffer):为线程分配的缓冲区,为提升分配、回收效率
  • 注:最开始读的时候,理解成了栈中存放基本数据类型,堆中存放对象,这显然是不对的;变量存放到哪,看它是局部变量还是全局变量即类的属性,后者存放到堆;而且存放基本数据类型都是存储变量名+变量值
1.6 方法区
  • 线程共享;存储已被JVM加载的类型信息、常量、静态变量、即时编译编译后的代码缓存数据;被称为Non-heap(是为了和heap区分开)
  • JDK6之前HotSpot有永久代表示方法区;JDK8之后完全剔除永久代
  • 当方法区无法满足新的内存需求时,也会抛出OOM
1.7 运行时常量池
  • 实际上是方法区的一部分; class文件中除了类的版本、字段、方法、接口等描述信息外,还有常量池表(Constant Pool Table,用于存放编译器生成的各种字面量和符号引用),这部分内容在类加载后存放到运行时常量池;一般也会存储符合引用翻译过来的直接引用
  • 运行时生成的常量也可放到其中,如String.intern();class文件中是静态文件,方法区中是运行时常量池
  • 也会OOM
1.8 直接内存
  • 这部分并不是JVM规定的数据区域,不过经常使用,而且也会OOM
  • JDK1.4之后引入NIO,可基于Channel和Buffer的I/O方式,使用Native函数直接分配堆外内存,然后通过一个存储在Heap的DirectByteBuffer对象作为这块内存的引用;避免了在Heap和Native内存中来回复制
  • 内存收本机大小影响,也会OOM
2、对象分配、布局和访问全过程 2.1、Overview 二、JVM的GC 三、类加载系统
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692633.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号