深入理解java虚拟机读书笔记1--java内存区域

李子沫 李子沫     2022-07-30     285

关键词:

  Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途、创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的开始和结束而创建和销毁。

Java虚拟机所管理的内存将会包括以下几个运行时数据区域:

1 程序计数器

  它是一块较小的内存空间,它的作用可以看做是当先线程所执行的字节码的信号指示器。

  java虚拟机的多线程是通过轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间计数器互不影响,独立存储。

  此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError的区域。

 2 java虚拟机栈

  与程序计数器一样,java虚拟机栈也是线程私有的,它的生命周瑜与线程相同。虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

  在这里指出一下,经常说的java内存区分为堆内存(Heap)和栈内存(Stack),这种分法太粗糙。

  局部变量表存放了编译器可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用和returnAddress类型(指向了一条字节码指令的地址)。ps:这里到底存放的是什么,我和同事还讨论过,接下来的后续文章中,我会补充。

3 本地方法栈

  这个没什么好说的,为虚拟机使用到的Native方法服务。

4 java堆

  这是Java虚拟机所管理的内存中最大的一块。,它为所以线程所共享。几乎(因为新技术的发展,所以加上几乎更严峻些)所有的对象实例和数组都要在堆上分配内存。

  Java堆的容量可以是固定大小,也可以随着需求动态扩展(-Xms和-Xmx),并在不需要过多空间时自动收缩。

5 方法区

  与堆一样,各个线程共享,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

  5.1运行时常量池

  运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。

  运行时常量池相对于Class文件常量池的一个重要特征是具备动态性,Java语言并不要求常量一定只能在编译期产生,也就是并非预置入Class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用得比较多的便是String类的intern()方法。

探讨 

 刚开始学习java时候,碰到各种内存,也是云里雾里,这次总算整理了下,基本上理清了,还有一些困惑,先提出,大家一起讨论:

1、java虚拟机栈基本数据类型,存储的到底是什么呢?是数据还是地址?(已解决,后面有时间再补充)

2、运行时的常量池中的,符号引用是什么?和java虚拟机栈的区别是?

深入理解jvm虚拟机读书笔记——内存模型与线程(代码片段)

注:本文参考自周志明老师的著作《深入理解Java虚拟机(第3版)》,相关电子书可以关注WX公众号,回复001获取。1.Java内存模型JMM概述:Java内存模型指的是JMM,而不是运行时数据区哦~Java语言为了保证... 查看详情

深入理解java虚拟机读书笔记三

深入理解Java虚拟机第三章内存管理读书笔记垃圾回收需要解决的三个问题是:哪些内存需要回收何时回收如何回收哪些内存需要回收对于Java内存运行时区域,程序计数器\虚拟机栈\本地方法栈三个部分是线程私有的,随线程而生,随... 查看详情

深入理解jvm虚拟机读书笔记——运行时数据区(代码片段)

注:本文参考自周志明老师的著作《深入理解Java虚拟机(第3版)》,相关电子书可以关注WX公众号,回复001获取。跨平台性是Java语言的重要特性,而这一特性本质上就是通过JVM虚拟机来实现的。下面就来... 查看详情

深入理解java虚拟机读书笔记——java内存区域与内存溢出异常(代码片段)

学习参考资料:周志明老师的著作《深入理解Java虚拟机(第3版)》1.运行时数据区域根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会分为以下几个运行时数据区域,如下图所示。其中每个线程有... 查看详情

深入理解jvm虚拟机读书笔记——运行时数据区(代码片段)

注:本文参考自周志明老师的著作《深入理解Java虚拟机(第3版)》跨平台性是Java语言的重要特性,而这一特性本质上就是通过JVM虚拟机来实现的。下面就来通过深入学习JVM来进一步增加我们对Java这门编程语言的... 查看详情

java内存区域——深入理解jvm读书笔记

本内容由《深入理解java虚拟机》的部分读书笔记整理而成,本读者计划连载。通过如下图和文字介绍来了解几个运行时数据区的概念。方法区:它是各个线程共享的区域,用于内存已被VM加载的类信息、常量、静态变量、即时编... 查看详情

深入理解java虚拟机-读书笔记(代码片段)

第1章走近Java第2章Java内存区域与内存溢出异常第3章垃圾回收器与内存分配策略第4章虚拟机性能监控与故障处理工具第1章走近JavaJava程序设计语言、Java虚拟机、JavaAPI类库统称为JDK。Java技术体系分为4个平台:JavaCard:Apple... 查看详情

读书·深入理解java虚拟机(代码片段)

前言Java内存区域运行时数据区1.程序计数器2.Java虚拟机栈3.本地方法栈4.Java堆5.方法区内存溢出和垃圾回收1.内存溢出2.垃圾回收3.内存分配与回收策略虚拟机类加载机制1.加载2.验证3.准备4.解析5.初始化前言欢迎关注微信公众号“... 查看详情

深入理解jvm虚拟机读书笔记——对象的创建与内存布局(代码片段)

注:本文参考自周志明老师的著作《深入理解Java虚拟机(第3版)》1.对象的创建过程在Java语言层面,创建对象一般是借助new关键字去实现:Useruser=newUser();而在虚拟机中,对象的创建过程如下:当Jav... 查看详情

深入理解jvm虚拟机读书笔记——锁优化(代码片段)

注:本文参考自周志明老师的著作《深入理解Java虚拟机(第3版)》,相关电子书可以关注WX公众号:兴趣使然的草帽路飞,回复001获取。1.Java语言中的线程安全按照线程安全的“安全程度”由强至弱来排... 查看详情

深入理解jvm虚拟机读书笔记——锁优化(代码片段)

注:本文参考自周志明老师的著作《深入理解Java虚拟机(第3版)》,相关电子书可以关注WX公众号:兴趣使然的草帽路飞,回复001获取。1.Java语言中的线程安全按照线程安全的“安全程度”由强至弱来排... 查看详情

深入理解jvm虚拟机读书笔记——对象的创建与内存布局(代码片段)

注:本文参考自周志明老师的著作《深入理解Java虚拟机(第3版)》,相关电子书可以关注WX公众号,回复001获取。1.对象的创建过程在Java语言层面,创建对象一般是借助new关键字去实现:Useruser=newUs... 查看详情

《深入理解java虚拟机》读书笔记-垃圾收集器与内存分配策略

  在堆里存放着java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前需要知道哪些对象还存活,哪些对象已经死去。那怎么样去判断对象是否存活呢?     一、判断对象是否存活算法  1、引用计数法  ... 查看详情

深入理解java虚拟机笔记1:oom实战(代码片段)

通过代码模拟Java虚拟机规范中描述的各个运行时区域内存溢出的场景。1.Java堆溢出2.虚拟机栈和本地方法栈溢出2.1StackOverflowError2.2栈OutOfMemoryError3.方法区和运行时常量池溢出3.1运行时常量池溢出3.2方法区溢出4.本机直接内存溢出... 查看详情

深入理解java虚拟机笔记1:oom实战(代码片段)

通过代码模拟Java虚拟机规范中描述的各个运行时区域内存溢出的场景。1.Java堆溢出2.虚拟机栈和本地方法栈溢出2.1StackOverflowError2.2栈OutOfMemoryError3.方法区和运行时常量池溢出3.1运行时常量池溢出3.2方法区溢出4.本机直接内存溢出... 查看详情

深入理解java虚拟机读书笔记---运行时数据区域

运行时数据区域1.程序计数器   程序计数器(ProgramCounterRegister)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行... 查看详情

深入理解jvm虚拟机读书笔记——垃圾回收器(代码片段)

注:本文参考自周志明老师的著作《深入理解Java虚拟机(第3版)》,相关电子书可以关注WX公众号,回复001获取。如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。《Java虚拟机... 查看详情

深入理解jvm虚拟机读书笔记——垃圾回收器(代码片段)

注:本文参考自周志明老师的著作《深入理解Java虚拟机(第3版)》,相关电子书可以关注WX公众号,回复001获取。如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。《Java虚拟机... 查看详情