【深入理解Java虚拟机】学习小结

《深入理解Java虚拟机》(第3版) 学习笔记,涵盖全书精髓 说是每位Javaer必看的一本书不过分吧 阅读详情

第一章 走近Java

摘书

  1. Java各个版本新特性
  • 1.0:Java1.0提供了一个纯解释执行的Java虚拟机实现(Sun Classic VM)。JDK1.0版本的代表技术包括:Java虚拟机、Applet、AWT等。
  • 1.1:JDK1.1版的技术代表有:JAR文件格式、JDBC、JavaBeans、RMI。Java语法也有了一定的发展,如内部类(Inner Class)和反射(Reflection)都是在这个时候出现的。
  • 1.2:Java技术体系开始分为3个方向,分别为J2SE、J2EE、J2ME。在这个版本中出现的代表性技术非常多,如EJB、Java Plus-in、Java IDL、Swing等,并且这个版本中Java虚拟机第一次内置了JIT(Just In Time)编译器(JDK1.2中曾并存过3个虚拟机,Classic VM、HotSpot VM和Exact VM,其中Exact VM只能以外挂的形式使用JIT编译器)。在语言和API级别上,Java添加了strictfp关键字与现在Java编码之中极为常用的一系列Collections集合类。
  • 1.3:JDK1.3及其之后所有的版本默认虚拟机是HotSpot VM。JDK1.3相对于JDK1.2的改进主要表现在一些类库上(如数学运算和新的Timer API等),JNDI服务从JDK1.3开始被作为一项平台级服务提供(以前JNDI仅仅是一项拓展),使用CORBA IIOP来实现RMI的通信协议,等等。新添加了JavaSound类库。
  • 1.4:JDK1.4同样发布了很多新的技术特性,如正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等。
  • 1.5:JDK1.5在Java语法易用性上做出了非常大的改进。例如,自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)等语法特性都是在JDK1.5中加入的。在虚拟机和API层面上,这个版本改进了Java的内存模型(Java Memory Model,JMM)、提供了java.util.concurrent并发包。
  • 1.6:JDK1.6的改进包括:提供动态语言的支持(通过内置Mozila JavaScript Rhino引擎实现)、提供编译API和微信HTTP服务器API等。同时,这个版本对Java虚拟机内部做了大量改进,包括锁与同步、垃圾收集、类加载等方面的算法都有相当多的改动。
  • 1.7:JDK1.7的主要改进包括:提供新的G1收集器(G1在发布时依然处在Experimental状态,直至2012年4月的Update4中才正式“转正”)、加强对非Java语言的调用支持、升级类加载架构等。

体会

第二章 Java内存区域与内存溢出异常

摘书

程序计数器

  1. 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来实现。
  2. 由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。
  3. 如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空(Undefined)。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMerroyError情况的区域。

Java虚拟机栈

  1. 与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
  2. 局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、long、float、double)、对象引用(reference类型,它不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)和returnAddress(指向了一条字节码指令的地址)。
  3. 其中64位长度的long和double类型的数据会占用2个局部变量空间(Slot),其余的数据类型只占用1个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小,
  4. 在Java虚拟机规范中,对这个区域规定了两种异常状况:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展(当前大部分的Java虚拟机都可动态扩展,只不过Java虚拟机规范中也允许固定长度的虚拟机栈),如果拓展时无法申请到足够的内存,就会抛出OutOfMerroyError异常。

本地方法栈

本地方法栈(Native Method Stack)与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。在虚拟机规范中对本地方法栈中方法使用的语言、使用方法与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至有的虚拟机(譬如Sun HotSpot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。与虚拟机栈一样,本地方法栈区域也会抛出StackOverflowError和OutOfMerroyError异常。

Java堆

  1. 对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存,但是随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些为标的变化发生,所有的对象都分配在堆上也渐渐变得不是那么“绝对”了。
  2. Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”(Garbage Collected Heap,幸好国内没翻译成“垃圾堆”)。从内存回收的角度来看,由于现在收集器基本都采用分代收集算法,所以Java堆中还可以细分为:新生代和老年代;再细致一点的有Eden空间、From Survivor空间、To Surviver空间等。从内存分配的角度来看,线程共享的Java堆中可能划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB)。不过无论如何划分,都与存放内容无关,无论哪个区域,存储的都仍然是对象实例,进一步划分的目的是为了更好地回收内存,或者更快地分配内存。
  3. 根据Java虚拟机规范的规定,Java堆可以处于物理上不连续的内存空间中,只要逻辑上是可以连续的即可,就像我们的磁盘空间一样。在实现时,既可以实现成固定大小的,也可以是可拓展的,不过当前主流的虚拟机都是按照可拓展来实现的(-Xmx和-Xms控制)。如果在堆中没有内存完成实例分配,并且堆也没法再拓展时,将会抛出OutOfMerroyError异常。

方法区

  1. 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。
  2. Java虚拟机规范对方法区的限制非常宽松,除了和Java堆一样不需要连续的内存和可以选择固定大小或者可拓展外,还可以选择不实现垃圾收集。相对而言,垃圾收集行为在这个区域是比较少出现的,但并非数据进入了方法区就如永久代的名字一样“永久”存在了。这区域的内存回收目标主要是针对常量池的回收和对类型的卸载,一般来说,这个区域的回收“成绩”比较难以令人满意,尤其是类型的卸载,条件相当苛刻,但是这部分区域的回收确实是必要的。在Sun公司的BUG列表中,曾出现过的若干个严重的BUG就是由于低版本的HotSpot虚拟机对此区域未完全回收而导致内存泄露。
  3. 根据Java虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMerroyError异常。

运行时常量池

  1. 运行时常量池(Runtime Constant Pool)是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。
  2. 既然运行时常量池是方法区的一部分,自然受到方法区内存的限制,当常量池无法再申请到内存时会抛出OutOfMerroyError异常。

直接内存

  1. 在JDK1.4中新加入了NIO(New Input/Output)类,引入了一种基于管道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。
  2. 显然,本机直接内存的分配不会受到Java堆大小的限制,但是,既然是内存,肯定还是会收到本机总内存(包括RAM以及SWAP区或者分页文件)大小以及处理器寻址空间的限制。服务器管理员在配置虚拟机参数时,会根据实际内存设置-Xmx等参数信息,但经常忽略直接内存,使得各个内存区域总和大于物理内存限制(包括物理的和操作系统级的限制),从而导致动态拓展时出现OutOfMerroyError异常。

对象的创建

  1. 对象的创建过程:
  • 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。
  • 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。
  • 内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头),如果使用TLAB,这一工作过程也可以提前至TLAB分配时执行。
  • 接下来,虚拟机要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息。这些信息存放在对象的对象头(Object Header)之中。根据虚拟机当前的运行状态不同,如是否启用偏向锁等,对象头会有不同的设置方式。关于对象头的具体内容,稍后再做详细介绍。
  • 在上面工作都完成之后,从虚拟机的视角来看,一个新的对象已经产生了,但从Java程序的视角来看,对象创建才刚刚开始——方法还没有执行,所有的字段都还为零。所以,一般来说(由字节码中是否跟随invokespecial指令所决定),执行new指令之后会接着执行方法,把对象按照程序员的意愿进行初始化,这样一个真正可用的对象才算完全产生出来。

体会

  1. Java虚拟机运行时数据区分为五个部分,其中*方法区(Method Area)和堆(Heap)*是所有线程共享的数据区,虚拟机栈(VM Stack)、*本地方法栈(Native Method Stack)和程序计数器(Program Counter Register)*则是线程隔离的数据区。
  2. 以前学的时候,只知道内存大致分为堆栈和方法区,这里的堆栈放在一起会让人觉得栈是所有线程共享的,后来了解到,栈是线程私有的。如果有一些线程共享的变量和方法被volatile和synchronized修饰,应该是存在方法区。
  3. OutOfMerroyError内存溢出的错误不一定是堆内存的不够,在栈进行内存拓展的时候内存不够也会抛出这个异常。因此也需要关注是不是栈的异常情况。
  4. 1.7之前的字符串常量池是在方法区中的,1.7及其以后版本就移到堆中。
基于STM32+华为云IOT设计的云平台监控系统_102 本次设计结合现代生活的具体需求,设计出一套基于华为云IOT设计的云平台监控系统,可以远程实时查看家里光照强度、温湿度等信息,支持在云端控制家里的电器设备,实现远程控制。 阅读详情

相关推荐

QST QMC5883L —— 经典磁传感器的生存指南与替代预案

本文聚焦于QST旗下经典三轴磁力计 QMC5883L,解析其技术渊源、核心特性及当前面临的停产风险。结合真实应用场景提供续命方案与选型建议,为依赖该芯片的开发团队争取过渡时间窗口期。文章包含实测数据对比、生命周期管理策略及潜在替代方案拆解。存续价值判断✔️ 现有产品设计无需大幅改动即可延续生命;❌ 新项目采用将面临更高的维护成本;⚠️ 建议在6个月内完成技术路线切换。#磁传感器 #嵌入式开发 #供应链管理 #QST #QMC5883L。

2501_93066786的博客 997

java outofmerroy_JVM学习2 - OutOfMemroyError***

1、OOM的概念2、JVM堆内存溢出3、JVM栈/Native栈内存溢出4、方法区与常量池的内存溢出5、本机直接内存溢出1、OOM的概念OOM便是OutOfMemroyError,它是一个异常错误,代表的意思便是JVM当中的内存不够用了,最终导致程序的Crash,这个问题不是有某一类的特定语法导致的,存在很多的情况,所以这种错误对于程序员来说还是相当的难解的,因为我们的内存回收工作是交给GC去做的...

weixin_33396759的博客 236

Allegro网表导入报错VOIDs not allowed in parent SHAPE的解决方案

在PCB设计流程中,网表导入是确保电气连接正确传递的关键步骤。其原理是将原理图的逻辑连接关系映射到物理版图的图形数据库中。这一过程的技术价值在于保证设计数据的一致性,避免后续生产中出现电气错误。然而,在Cadence Allegro等EDA工具的实际应用中,数据库内部状态的不一致可能引发操作失败,例如常见的“VOIDs are not allowed in the parent SHAPE”报错。这类问题通常源于多人协作、跨版本操作或频繁编辑后积累的数据结构冗余。针对此场景,核心的解决方法是执行Databa

weixin_30954817的博客 319

如何解决Java内存溢出(out of memory)?

内存溢出(out of memory)是内存不够吗? 内存溢出(out of memory)通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。此时软件或游戏就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件或游戏一段时间。 内存溢出已经是软件开发历史上存在...

weixin_43305207的博客 2766

centos7下100T存储扩容(LVM)至150T

查看新增磁盘情况lsblk,fdisk -l [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 4.2G 0 rom vda 252:0 0 80G 0 disk ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2

tiyager的博客 1024

车规级非易失存储选型指南:从AEC-Q100到ISO 26262的可靠性设计

非易失存储器是电子系统中负责长期保存关键数据与代码的核心组件,其可靠性直接决定了系统的长期稳定运行能力。在汽车电子领域,这一要求被提升到了极致,必须满足严苛的车规级标准。从原理上看,存储器的数据保持能力、擦写寿命等关键参数在高温、振动等恶劣环境下会急剧衰减,因此需要专门的设计与验证。其技术价值在于保障车辆全生命周期的功能安全与数据完整性,避免因存储失效导致的安全隐患或频繁维护。应用场景涵盖从发动机控制单元、自动驾驶域控制器到智能座舱的各类电子控制单元。本文聚焦于车规级非易失存储的选型,深入解析AEC-Q10

weixin_30938149的博客 456

常见的OutOfMemoryError原因及解决方案

本文总结了常见的 OOM 原因及其解决方法。如有遗漏或错误,欢迎补充指正。当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误。

梦凝哲雪 1万+

Second-Order Cone Programming(SOCP) 二阶锥规划

个人博客Glooow,欢迎各位老师来踩踩 文章目录1. 二阶锥1.1 二阶锥定义1.2 二阶锥约束2. 优化问题建模3. 类似问题转化3.1 二次规划3.2 随机线性规划4. 问题求解 1. 二阶锥 1.1 二阶锥定义 在此之前,先给出二阶锥的定义。 在 kkk 维空间中二阶锥 (Second-order cone) 的定义为 Ck={[ut]∣u∈Rk−1,t∈R,∥u∥≤t} \mathc...

Glooow的博客 3万+

java.lang.OutOfMemoryError异常解决方法

java.lang.OutOfMemoryError异常解决方法       原因: 常见的有以下几种:   1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;   2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;   3.代码中存在死循环或循环产生过多重复的对象实体;   4.使用的第三方软件中的BUG;   5.启动参数内存值设定的过小;

z13197919100的博客 6万+

高温环境下(100℃以上)相机的几种保障方案

高温环境下相机保障措施摘要:针对120℃以上高温环境,相机需采取多重防护:1.散热设计采用金属机身、散热鳍片或风扇;2.关键部件选用耐高温材料(铝合金、特种玻璃);3.电子元件需军规级芯片并做三防处理;4.建议外接电源或耐高温电池。工业相机(如FLIR A655sc、Basler ace)及特种机型(Ximea xiQ)具备高温适应性,普通相机可加装隔热套件配合冷却系统。选择时需关注传感器信噪比和全局快门性能,并设置温度监控保护机制。注意高温会加速设备老化,需定期检测维护。(149字)

start_up_go的博客 1583

InvocationException: GraphViz‘s executables not found【BUG已解决】

在机器学习框架中遇到了一个bug:安装了GraphViz模块后,在对着sklearn的决策树文档操作输出决策树模型结果时,还是爆出了如下的错误: 报错位置为: 报错语句为:网上很多答案告诉我们,要我们安装GraphViz模块,然而并不对! 如下,我安装了GraphViz,但是还是报错了。 所以说问题不在这,我查阅质料发现,改正这个bug的方法有一个:下文详细描述。解决bug为: 1.去graphviz.官方下载自己电脑符合的操作系统的安装包:2,安装的时候,记住自己安装在电脑里的位置:以我的电脑为例,我的

一键难忘的博客 3967

Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识。在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。jv

RamondLee的专栏 6880

深入剖析 Wenet 下 AISHELL-1 的 run.sh 脚本:从数据准备到模型训练

run.sh脚本用于处理 AISHELL-1 数据集的整个训练和测试流程。我们将逐步分析脚本中的每个部分,包括环境变量、参数设置、各个阶段的执行等。stage: 设置脚本的起始阶段(如数据准备)。stop_stage: 设置脚本的结束阶段。通过对 Wenet 下 AISHELL-1 的run.sh脚本的详细剖析,我们希望你能更好地理解每个步骤的功能及其背后的原理。此脚本不仅为模型训练提供了便利,也为用户自定义和扩展训练流程提供了基础。希望本教程能帮助你顺利完成语音识别项目!

帅小柏的博客 1632

深入理解Java虚拟机-走近Java

文章目录概述Java技术体系Java发展史Java虚拟机发展史展望Java技术的未来实战:自己编译JDK本章小结 本博客主要参考周志明老师的《深入理解Java虚拟机》第二版 读书是一种跟大神的交流。阅读《深入理解Java虚拟机》受益匪浅,对Java虚拟机有初步的认识。这里写博客主要出于以下三个目的:一方面是记录,方便日后阅读;一方面是加深对内容的理解;一方面是分享给大家,希望对大家有帮助。 ...

ThinkWon的博客 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

《Thinking In Java》 VS 《Effective Java》 VS 《深入理解Java虚拟机》

今天刚考完试,在5天以前的前4个月时间里,我很庆幸自己选了一个看书的学习途径。从上个学期的暑假到现学期的11周里面,读了《Thinking In Java》、《深入理解Java虚拟机》和《Effective Java》,感悟颇多。首先先说明一下,我以前是看视频学习的,就做过两三个学校的网站,都已经上线在使用。没做过什么特别高大上的东西,所以我是处在新手的角度去读书的,我也知道自己的理解很浅,不

小浩子的博客 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

《深入理解Java虚拟机》学习笔记

本篇是《深入理解Java虚拟机-Java 高级特性与最佳实践》学习笔记,周志明著,Understanding the JVM-Advanced Features and Best Practices,机械工业出版社,2011.6出版。 重温Java JVM知识,重点学习了与日常开发工作相关性最大的“自动化内存管理”模块,对Java容器优化、内存问题解决很有帮助;习惯了从互联网看电子书,难以集中和记忆,现在找几本纸质书重温,可以很清静、很安静的理解和消化,受益匪浅。

Java之旅 8778

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【面试题】深入理解Java虚拟机

前言:Java虚拟机面试题推荐配合《深入理解虚拟机第三版》食用效果更佳 主要有三部分:1.Java内存区域,2. 垃圾回收机制,2. 类加载过程

一只小逸白 1万+

深入理解Java虚拟机:为什么我们需要学习它?

学习Java虚拟机对于Java开发者来说具有多方面的意义。它可以帮助我们更好地理解Java的运行机制、实现跨平台性、掌握内存管理与垃圾回收、进行性能优化与调试、深入理解Java技术栈、支持并发编程、了解JVM的未来发展、适应容器化技术以及提升个人竞争力。因此,作为一名Java开发者,我们应该投入时间和精力去学习和掌握Java虚拟机的相关知识。

让每一行代码都有改变世界的力量 1500

膜拜,阿里内部都在学习的五大深入理解Java虚拟机PDF,简直强无敌

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

2401_84436905的博客 1264

《深入理解Java虚拟机》导读

​ 简介: ​ 介绍初学者如何快速学习阅读《深入理解Java虚拟机》书籍。 书籍PDF:深入理解Java虚拟机:(第3版).pdf · UITC/save-paper - Gitee.com.pdf)

yzy_cb的博客 525

java虚拟机的学习书籍推荐

javaEE开发已然是一个老生常谈的话题了,但经典之所以会成为经典,就是因为有可重复琢磨之处,每一次的反复推敲都会有不一样的收获。如果你不满足于做一个只会写if…else…的Java程序员,而是希望更进一步,我随便举几个例子吧: 1、了解Java代码的底层运行机制 2、定位性能问题 3、对整个系统进行性能调优 4、解决各种奇奇怪怪的线上线下问题 5、更加高级别的,为自己的项目量身定做一款...

weixin_30379531的博客 1679

深入理解Android Java虚拟机ART相关及勘误

公众号: 神农和朋友们的杂文集 目录 本书的简单介绍 本书各章的难度评估 深入学习有什么好处? 本书勘误表 P14 P21 本书的简单介绍 《深入理解Android Java虚拟机ART》是一本以Android 7.0 ART JAVA虚拟机为目标的源码分析书籍。全书花费了将近3年时间, word原稿有1300多页,最终出版的书籍有900多页。定价看起来不便宜,16...

Innost的专栏 8300

深入理解java虚拟机 下载_深入理解Java虚拟机

深入理解Java虚拟机电子版深入理解Java虚拟机电子版,全书共分为五大部分,统介绍了Java的技术体系、发展历程、虚拟机家族,以及动手编译JDK,了解这部分内容能对学习JVM提供良好的指引,里面还有更多的精彩内容,感兴趣的就快来下载吧内容简介《深入理解Java虚拟机:JVM高级特性与最佳实践》内容简介:作为一位Java程序员,你是否也曾经想深入理解Java虚拟机,但是却被它的复杂和深奥拒之门外?...

weixin_28831399的博客 838

深入理解 java 虚拟机 pdf 第三版_深入理解《深入理解Java虚拟机》

重读《深入理解Java虚拟机》,以问答的形式整理笔记。Java内存区域是如何分配的?Java在执行程序过程中,会将他所管理的内存划分为几个不同区域,有各自的用途,创建时间和销毁时间。有这样几个区域:程序计数器、虚拟机栈、本地方法栈、堆、方法区、运行时常量池程序计数器:一块比较小的内存空间,可以当作是当前线程所执行的字节码的行号的指示器。因为多线程下,是线程轮流切换,分配CPU的执行时间来实现的。一...

weixin_32339855的博客 1万+

深入理解Java虚拟机——Java虚拟机介绍——第一章

文章目录1:Java虚拟机的介绍2:JVM的存在位置3:JVM整体结构4:Java代码执行流程5:JVM指令集的架构模型6:JVM的生命周期7:常见的Java虚拟机7.1 Sun Classic VM7.2 Exact VM7.3 HotSpot VM 1:Java虚拟机的介绍 Java虚拟机的介绍 1: Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Jav...

qq_44891295的博客 4345

深入理解java虚拟机

深入理解java虚拟机(一)、Java运行时数据区域和Java内存模型(JMM)程序计数器Java虚拟机栈1. 局部变量表2. 操作栈3. 动态链接4.方法返回地址(return Address)本地方法栈Java堆方法区运行时常量池直接内存Java内存模型JVM主内存与工作内存重排序和happens-before规则volatile关键字(二)、Java垃圾收集和内存分配策略如何确定某个对象是“...

@龙猫的博客 4531
上一篇: 【Java】Observer和Observable实现观察者模式
下一篇: 【exception】Could not read document Invalid UTF-8 middle byte 0x3f
ColdFireMan
博客等级 码龄10年 27粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值