深入理解JVM读书笔记——自适应内存管理(二)

java术语大全(面试时有时会问到的专业术语) 面试时经常HR会经常问你一些技术方面的术语,当你什么都不知道的时候,往往会给面试管一些非常不好的印象...其实你应该都了解一下的,本人在百度或者其他途径总结了一些这方面的java术语,希望能给你们带来一些小小的帮助... 立即下载

笔记书籍:JRockit权威指南深入理解JVM

作者:马库斯.希尔特 马库斯.拉杰格伦 著
翻译:曹旭东

3.4性能与伸缩

3.4.1线程局部分配

为分配对象而保留的区域被称为线程局部缓冲区(thread local area,TLA),每一个线程都有一个线程局部缓冲区。
正常情况下,在线程内的缓冲区中为对象分配内存要比直接 在需要同步操作的堆上分配内存快得多。
一般情况下,为了更好地利用缓存,达到更高的性能,TLA的大小介于16KB与128KB之间。当TLA被填满时,垃圾回收器会将TLA中的内容提升到堆中。因此,可以将TLA看作是线程中的新生代内存空间。

3.4.2更大的堆内存

垃圾回收的复杂程度通常与存活对象集合的大小相关,与堆的大小没什么关系。因此,在存活对象集合不变的情况下,可以让垃圾回收器使用更大的堆内存,这样做能够减缓内存碎片化的趋势,并且能够存储更多的存活对象。

*以下内容仅做简单概述,了解即可
1. 32位架构下 的4GB内存限制

在32位系统中 ,内存的最大寻址范围是4GB,但其他东西(例如操作系统本身)也会占用一部分空间。Windows操作系统要求其内核位于内存中端,无法开辟出一块连续的内存空间,大大限制了堆的使用 。
JRockit是目前唯一支持以非连续内存空间作为堆的JVM,需要记录一些额外的信息来 连接两块分离的堆内存空间。(性能较低,开销较大)

2. 64位架构

对于64位架构无须考虑内存空间被非应用程序所占去,内存空间较大 。但是在64位架构中,指针字节由4字节变为8字节,需要消耗更多的CPU缓存资源,所以64位架构下运行较慢。
压缩指针
在64位系统中,堆外的本地指针是系统运行的一部分,仍然是64位的,例如JNI用于引用Java对象的句柄。在代码中可能需要通过JNI转换,将压缩过的指针转换为普通的、系统长度的地址,或是做反向转换。例如垃圾回收器和本地代码可能会在内部使用本地指针 ,需要有相应的方法将压缩的指针转换为普通的系统指针,以及反向转换的方法。这个转换过程就称为指针压缩(reference compression)和指针解压缩(reference decompression)。
就JRockit来说,压缩指针之后的主要努力方向是最大化可用堆内存的大小和可存放在L1缓存中的对象数量。为了避免某些场景下可能出现问题,JRockit不会压缩局部栈帧中的指针,一般来说,代码生成器会在载入对象域后插入解压缩指针的代码,在存储对象域之前插入压缩指针代码,这样做虽然有性能损耗,但是极小忽略不计。

3.4.3缓存友好性

垃圾回收器应兼顾缓存友好性,当缓存大量丢失,应用程序性能则会大幅下降。
CPU中含有指令缓存和数据缓存(还有一些其他专用缓存)
缓存中包含有多个缓存行(cache-line),缓存行是CPU可访问的最小缓存单元。
当CPU从 内存中获取数据后,会将数据放入到缓存行中,以便将来使用时可以更快获取,这样会比从内存中再读取一次快上几个数量级。

在内存管理系统中,需要关注的问题有:对象存放、对齐和内存分配策略
1 预抓取
使用预抓取策略把即将使用到的数据预先加载到缓存中。在垃圾回收器中,使用TLA分配内存时,TLA实际上是被划分成很多很小内存块的,当使用某个内存块时,会预抓取与其相邻的内存块,这样当使用相邻内存块时就可以快速获取到所需数据。
2 数据存放
如果能预知在某段时间内,访问数据是按顺序或近似顺序的,那么预先将可能会访问到的数据放到同一缓存行中,根据局部性原理,可以获得更好的性能。
除了通过运行时反馈信息外,还可以通过获取其他静态信息来预测可能会使用到的数据,例如可以预先抓取某个对象引用到的其他对象,或者某个数组对象中所包含的元素
JVM预加载就是这个原理!!!!!!!!恍然大悟!!!!!!!!!

3.4.4 大内存页

内存分配是通过操作系统及其所使用的页表完成的。操作系统将物理内存划分成多个页来管理,从操作系统层面讲,页实际分配内存的最小单位。传统上,页的大小是以4KB为基本单位划分的。
进程所使用的的是虚拟地址空间,并非真正的物理地址。为了将虚拟页面转换为实际的物理内存地址,可使用名为旁路转换缓冲(translation lookaside buffer,TLB)的缓存来加速地址的转换操作。

从实现上看,如果页面的容量非常小的话,会导致频繁出现旁路转换缓冲丢失。
解决办法:将页面容量调大几个数量级。

3.4.5 自适应

JRockit可以在应用程序运行过程中,基于内存管理系统的反馈信息来调整垃圾回收的具体行为和相关参数,例如堆的大小,代的划分,甚至调整垃圾回收的整体策略。

3.5 近实时垃圾回收(只做了解)

3.5.1软实时与硬实时系统

硬实时系统是一种更加传统的实时系统,类似合成器或心脏起搏器之类,要求100%确定系统的行为。
软实时系统指运行时系统可以接受一定程度延迟,并控制暂停时间,这样即使软件系统仍然存在不确定性,单次的暂停时间也不会超过某个阈值。

3.5.2 JRockit Real Time

JRockit Real Time 主要特点就是可以不修改已有系统的情况下保证系统有稳定的延迟,即插即用,用户只需在命令行参数中指定期望的暂停时间。
软实时是JRockit Real Time的核心机制。
JRokic 如何实现如此高性能的垃圾回收?
——高效的并行执行
——细分垃圾回收过程,将之变成几个可回滚、可中断的子任务(work packet)
——高效的启发式算法
实现低延迟的关键仍是尽可能多让Java应用程序运行,保持堆的使用率和碎片化成都在一个较低的水平。
标记-清理算法。标记占用了90%的时间损耗,采用多个子任务共同协作模式,若暂停应用时间过长,则暂停并不废弃一个子任务,待到下次垃圾回收时再继续执行。
使用写屏障来跟踪系统中被 标记为脏的卡片数量,可以分析垃圾回收的行为。如果某个线程的写操作明显多于其他线程,那么就需要运行时系统对该线程特别注意,并做一些优化。

3.6内存操作相关的API

3.6.1析构方法

finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存之前被调用,即当一个对象被虚拟机宣告死亡时会先调用它finalize()方法,让此对象处理它生前的最后事情(这个对象可以趁这个时机挣脱死亡的命运)。
如何自我救赎:
1.对象覆写了finalize()方法(这样在被判死后才会调用此方法,才有机会做最后的救赎);
2.在finalize()方法中重新引用到"GC Roots"链上(如把当前对象的引用this赋值给某对象的类变量/成员变量,重新建立可达的引用).
每个java对象包含一个finalize方法,用户可以重写该方法完成自定义析构操作。按照文档说明,finalize方法会在该对象被当做垃圾回收之前调用,因不知析构函数何时执行,导致资源无法重复利用,所以资源释放应该由程序员显式控制。
finalize方法可能被任意线在任意时间调用,无论该线程当前持有哪个对象的锁,都可以正常执行。会造成死锁,或违反Java语义的定义。
析构函数应避免使用。

3.6.2 Java中的引用

Java中存在多种引用,分为四种 :强引用、弱引用、虚引用、软引用、
几种对象引用类型位于java.lang.ref包下,均继承自java.lang.ref.Reference类。所有的Reference类型的实例都有一个get方法用于获取当前引用所指向的实际对象,如果对象是不可达的,则调用get方法则为Null。
1.弱引用
弱引用是指那些不足以使对象保留在内存中的引用。
弱引用常作为缓存的key用于java.util.WeakHashMap实例中。当JVM执行垃圾回收时,弱引用所指向的对象会被释放掉,这样可以防止无意识的内存泄漏,弱引用可以看做是Java中可用于防止内存泄漏的一种内建机制。
2.软引用
作为一种弱引用,软引用所指向的对象,垃圾回收器会尽可能将之保存在内存中,但当内存不足时,会首先将之回收掉。
3.虚引用
虚引用更常用于实现析构函数,用于取代finalize方法。与弱引用和软引用类似,它也是对普通对象的包装,只不过其get方法返回的永远是null。

访问虚引用需要以定期的间隔(或执行阻塞remove 操作)轮询java.lang.ref.Reference-Queue实例,以便得知目标对象是否要被回收掉了。由于虚引用的get只会返回null,所以无法获取到其所指向的真正对象的句柄并使其复活,也就避免了finalize方法存在的问题,又有了它的优点。

JRockit命令行参数:-XX:AllowSystemGC=False禁用System.gc方法。

3.7 JRockit中的内存管理

本节简单介绍与JRockit内存管理相关的基本命令行开关。
1、打印垃圾回收日志
-Xverbose:gc(或者-Xverbose:memory)
OC和YC分别表示老年代垃圾回收(old collection )和新生代垃圾回收(nursery collection)
2、设置堆的初始值和最大值
参数-Xmx和-Xms是所有JVM通用的标准参数,分别用于指定堆的最大值和初始值。如果没有设置,则堆的大小可能会在应用程序运行过程中,依据运行时反馈信息增大或缩小。以下面的配置为例:
java -Xms1024M -Xmx2048M
设置堆得初始值为GB,最大值为2GB。如果应用程序超出2GB,则会报OutOfMemoryError错误
3、设置垃圾回收期的执行目标
-XgcPrio:throughput:主要优化吞吐量,不关心响应时间。
-XgcPrio:pausetime:主要优化低延迟。
-XgcPrio:deterministic:该参数会启用JRockit Real Time,以消耗额外的系统资源换取极端的暂停时间。
以下配置启用了JRockit Real Time,并设置了暂停时间的上限:
java -XgcPrio:deterministic -XpauseTarget:5ms

4、指定垃圾回收策略
-Xgc系列参数可以用于指定垃圾回收策略
-Xgc:singlecon:不分代的并发垃圾回收(single generational concurrent).
-Xgc:gencon:分代式并发垃圾回收(generational concurrent)
-Xgc:singlepar:不分代的并行垃圾回收(single generational parallel)。
-Xgc:genpar:分代式并行垃圾回收(generational parallet)

5、压缩引用
下面的配置禁用了引用压缩,并强制JRockit使用原始本地指针来标识对象地址。
java -XXcompressedRefs:enable=false
下面的配置启用了引用压缩,并制定所支持的堆的大小是64GB:
java -XXcompressedRefs:enable=true,size=64GB

用Arduino Mega2560和TB6612驱动MG513电机,我踩过的坑和最佳实践 本文详细介绍了使用Arduino Mega2560和TB6612驱动模块控制MG513直流电机的实战经验,包括硬件连接、PWM配置、编码器信号处理等关键技巧。通过优化电源系统、信号线布局和软件控制算法,有效解决了电机抖动、转速不稳等常见问题,为机器人底盘和自动化项目提供了可靠解决方案。 阅读详情

相关推荐

Mac版UltraEdit 18.00.0.19破解教程:终端一行命令搞定(附版本适配指南)

本文为Mac用户提供了UltraEdit的合法替代方案与授权指南,强调破解软件的法律风险和安全隐忧。推荐使用VS Code、Sublime Text等开源或商业编辑器,结合终端工具如Vim/Neovim,实现高效文本编辑。同时详细介绍了UltraEdit的官方授权选项,帮助开发者在遵守软件许可的前提下提升工作效率。

k9l0m1的博客 357

从 Java 代码到 Java 堆

  背景信息:Java 进程的内存使用 参考知识 如需进一步了解 Java 应用程序的进程内存使用,请参阅 Andrew Hall 撰写的 developerWorks 文章 “内存详解”。这篇文章介绍了 内存详解 以及 AIX® 提供的布局和用户空间,以及 Java 堆和本机堆之间的交互。 通过在命令行中执行 java 或者启动某种基于 Java 的中间件来运行 Java...

zhenaikeke 395

超酷炫,Python实现交通数据可视化!

此时输出的栅格化参数params的内容存储了栅格坐标系的原点坐标(slon、slat)、单个栅格的经纬度长宽 (deltalon、deltalat)、栅格的旋转角度(theta)、栅格的形状(method参数,其值可以是方形rect、三角形tri和六边形hexa)以及栅格的大小(gridsize参数,单位为米)。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。今天分享一次Python交通数据分析与可视化的实战!

m0_59236127的博客 1697

初探调优4:JVM性能调优实战,从定位性能瓶颈到Tprofiler定位代码

JVM 性能调优实战之:一次系统性能瓶颈的寻找过程 玩过性能优化的朋友都清楚,性能优化的关键并不在于怎么进行优化,而在于怎么找到当前系统的性能瓶颈。 性能优化分为好几个层次,比如系统层次、算法层次、代码层次...JVM 的性能优化被认为是底层优化,门槛较高,精通这种技能的人比较少。笔者呆过几家技术力量不算弱的公司,每个公司内部真正能够进行 JVM 性能调优的人寥寥无几、甚至没有。如是乎,能...

Java技术江湖 1922

XGBoost的简单安装及入门使用

XGBoost安装及简单入门 XGBoost支持多种操作系统,如Windows, Linux, MacOS等,并支持多种语言版本,如Python, R, Scale, Java等。XGBoost的安装方式一般有两种,一种是直接通过pip安装(适合用于Python),另外一种是通过源码编译安装 1、通过pip安装 通过pip安装Python包既简单又方便,只需执行如下的命令: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xgboost 使用

qq_41513230的博客 3万+

FPGA开发中Quartus与Modelsim联合仿真配置与调试全攻略

在数字电路设计与FPGA开发中,仿真验证是确保逻辑功能正确性和时序性能达标的核心环节。其基本原理是通过软件模拟硬件电路的行为,在设计转化为实际硬件前发现潜在缺陷。这项技术的核心价值在于大幅降低开发风险与成本,提升设计可靠性,广泛应用于通信、嵌入式系统、芯片验证等领域。对于使用Intel FPGA平台的开发者,Quartus Prime作为官方综合布局布线工具,其内置仿真器在应对复杂设计、深度调试和自动化测试时存在局限。此时,引入专业仿真工具Modelsim进行联合仿真成为提升验证效率的关键实践。通过搭建自动

weixin_33736048的博客 451

探秘Java虚拟机——内存管理与垃圾回收

本文主要是基于Sun JDK 1.6 Garbage Collector(作者:毕玄)的整理与总结,原文请读者在网上搜索。 1、Java虚拟机运行时的数据区 2、常用的内存区域调节参数 -Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制 ...

weixin_34015336的博客 297

基于STM32的坐姿矫正与久坐提醒系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6主控,搭配MPU6050六轴姿态传感器、HC-SR04超声波测距模块,完整实现了坐姿矫正与久坐提醒系统的全流程开发,从多传感器数据采集、数字滤波、姿态解算、坐姿判断到多模式提醒,全流程无跳步保姆式拆解,配套逐行注释可直接编译的开源代码,新手跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 438

weblogic使用jrocket虚拟机调试参数

一、Java虚拟机参数 JAVA Memory arguments:  -Xverbose:exceptions=debug -Xverbose:memory -Xverbose:cpuinfo -Xverboselog:/root/weblogicboot/myFile.log -Xverbosetimestamp -Xms4096m -Xmx4096m -XX:+HeapDumpOnOutOf...

csj50的专栏 1638

基于 Qt C++ 的 2D 动画制作工具

你可以修改它的中心坐标 (X, Y)、宽度 (W)、高度 (H),或点击 "选择颜色" 按钮改变其填充色。* **图形视图 (`QGraphicsView` 和 `QGraphicsScene`)**: 用于显示和编辑当前帧的内容。

寒寒豆豆软件公司的博客 114

【PCIe 总线及设备入门学习专栏 6.2 -- PCIe VDM (Vendor Defined Messages)】

在PCIe协议中,Vendor Defined Messages (VDMs) 是一种允许厂商定义和传输特定功能的消息类型。这种机制扩展了标准 PCIe 消息的功能,可以用于实现供应商自定义的功能,例如固件更新、设备配置和诊断信息传输。PCIe VDM 是通过实现的,它遵循 PCIe 协议栈的结构,包括事务层、数据链路层和物理层。

CodingCos的博客 1898

JRockit的-Xgc参数及其意义

JRockit的-Xgc参数及其意义-Xgc 使用 -Xgc 可设置静态垃圾收集器。静态垃圾收集器的分类如 表:静态垃圾收集器   单空间 分代式 并发 单空间并发 -Xgc:singlecon 分代式并发 -Xgc:gencon 并行 单空间并行 Xgc:s

小鱼的最爱 2260

抓包网络调试工具 reqable抓包教程

如果CA根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入CA根证书安装界面,详细步骤请阅读。在API调试中,获取流量是第一步也是最基本的操作,这里讲解下如何使用Reqable获取流量,通俗地讲就是抓包。我们可以选择一个图片请求,双击打开详情面板,能够看到该请求的详细信息。如果系统代理未设置,网络图标是黄色,点击网络图标可以自动设置系统代理。此域名的结构树,可以查看该域名下所有请求的目录结构,点击选择可以查看该请求的详情。首先,需要启用Reqable的调试功能,点击最右上角的。打开浏览器,输入地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2558

深入理解JVM读书笔记——自适应内存管理(一)

笔记书籍:JRockit权威指南深入理解JVM 作者:马库斯.希尔特 马库斯.拉杰格伦 著 翻译:曹旭东 3.1自动内存管理 自动内存管理(automatic memory management)是指无须使用老式的内存释放操作,例如free操作符 ,就可以自动回收废弃对象占用的内存的垃圾回收技术。 大部分自动内存管理系统使用的都是引用跟踪技术,即执行垃圾回收时沿着对象的引用关系遍历堆中对象,以确定...

JavaKobeBryant的技术交流 847

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

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

读书笔记——深入理解JVM(JVM自动内存管理)

简介 本系列为《深入理解Java虚拟机—JVM高级特性与最佳实践》一书的阅读笔记。 本书开头介绍了JVM发展的历史,接着介绍了JVM是如何实现自动内存管理的。 本章节主要介绍: JVM的存储结构; JVM的运行机制; GC 的原理。 1. JVM内存结构和内存溢出异常 JVM实质上就在内存中开辟的一块内存空间,这块空间被JVM占用并被划分成若干个分区(逻辑上的),为了高效的管理,这些分区会执行不同的功能,由于JVM有GC机制,所以我们不用太过于纠结内存泄露的问题,然而当出现内存不足等问题时,我们需要分析

yindarui 551

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【亲测免费】 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记推荐

深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记推荐 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记》是一个开源项目,旨在为Java开发者、系统架构师以及对JVM有深入研究兴趣的读者提供一份详尽的读书笔记。这份笔记基于《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》一书...

gitblog_06510的博客 475

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深入理解 Jvm 读书笔记(一)

Jvm 内存管理,GC,类文件架构 关键字: HotSpot VM,两级即时编译器, 编译器和解释器混合工作模式,模块化, 混合语言,多核并行``函数式编程, 自动内存管理 jvm 运行时数据区 (JVM栈,本地方法栈,程序计数器,堆,方法区) 线程私有 Jvm栈 (JVM Stack) 生命周期与线程相同; 描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧...

MrJarvisDong的博客 390

深入理解JVM 读书笔记

xx

onlyForCloud的专栏 496

《深入理解JVM虚拟机》读书笔记

1、内存区域的划分 内存管理区域大致分为:栈,堆,方法区 栈:都是线程私有。分为程序计数器、虚拟机栈和本地方法栈。 程序计数器记录线程运行的指针信息;虚拟机栈存储基本数据类型、局部变量、对象引用地址、方法出口等信息; 堆:存放对象实例,基本所有对象都在堆上分配内存,是垃圾收集器主要的管理区域。通过-Xmx和-Xms控制 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 2、对象的创建过程 1、在常量池中定位,检查是否已经被加载、解析和初始化过。 2、如果没有,虚拟机分配

wuzhiheng_的博客 246

《深入理解java虚拟机》读书笔记(1)- JVM内存基本结构

文章目录前言一、JVM运行时内存区域二、java对象在内存中是怎样存在的1. 对象的创建1.1 对象创建方式1.2 考虑多线程的情况2. 对象的内存布局3. 怎么找到内存中的对象总结 前言 面向的读者: 有一定java基础 想系统学习JVM基础知识 一、JVM运行时内存区域 需要注意的是,JVM划分了很多内存区域,这些区域都是逻辑上的。其实在物理上,他们可以是同一块区域或者不块区域。这里,我们只讨论逻辑区域。 程序计数器(program counter register): 由JVM 控制,没有定义O

masternick的专栏 208

【读书笔记】深入理解Java虚拟机(周志明)(1)第一部分 走进Java(2)第二部分 自动内存管理机制

无重点学习Java虚拟机的重要原因:当出现内存泄漏时,知道怎么排查。学习垃圾收集(Garbage Collection, GC)的原因:可以帮助我们避免和解决OOM问题、由JVM引起的性能瓶颈等:调整Eden区和Survivor区的比值。默认为8:1:1。例如:我们经常要产生临时大对象时,可以将:直接晋级到老年代对象的大小。:设置CMS收集器GC时给用户留多少%的空间无重点无重点。

iioSnail的博客 1728

《深入理解Java虚拟机 JVM高级特性与最佳实践》读书笔记

《深入理解Java虚拟机 JVM高级特性与最佳实践》读书笔记 文章目录**《深入理解Java虚拟机 JVM高级特性与最佳实践》读书笔记**一、Java历史二、自动内存管理机制**第2章** Java内存区域与内存溢出异常**2.1概述****2.2运行时数据区域**[外链图片转存失败(img-J0qrhJok-1565766361214)(/Users/yanruruyan/Desktop/屏...

bcadl01的博客 228

《深入理解Java虚拟机》的思维导图读书笔记

《深入理解Java虚拟机》的思维导图读书笔记 作者:被称为L的男人 原文链接:http://www.jianshu.com/p/ff4a1795e462 本文为转载文章,原文请点击左下角查看,谢谢。   说明 本篇文章是对周志明的《深入理解Java虚拟机》的读书笔记,思维导图使用Mindjet MindManager。曾经看到过这样一

huangshulang1234的博客 1874

深入理解JVM--读书笔记

一次线上项目OOM,在网上查询很多内容解决之后,无意之中也接触了一些JVM底层的概念,觉得很有趣,就买了这本书。工作之余看了看,简单写了点笔记。部分章节后续有时间会再细看,再补充笔记 1. Java内存区域与内存溢出异常 内存模型 包含了堆,栈,本地方法栈,虚拟机栈与程序计数器,其中方法区与栈线程共享 程序计数器 Program Counter Register,空间较小,可以看作是当前线程执行的字节码行号指示器。 如果线程执行的是Java方法,则计数器记录的是正在执行的虚拟机字节码的指令地址,如果执行.

哗啦啦啦的博客 319

深入理解Java虚拟机(Java高阶读书笔记)

文章目录深入理解Java虚拟机 - JVM高级特性与最佳实践(周志明)第2版第2章 Java内存区域与内存溢出异常2.1 概述2.2 运行时数据区域2.2.1 程序计数器2.2.2 Java虚拟机栈2.2.3 本地方法栈2.2.4 Java堆2.2.5 方法区2.2.6 运行时常亮池2.2.7 直接内存 深入理解Java虚拟机 - JVM高级特性与最佳实践(周志明)第2版 只要看:第2章、第3章...

GatesMa's blog 2691

《深入理解Java虚拟机》

相关文字笔记心得 https://www.cnblogs.com/wtzbk/p/7985156.html 内存布局及GC导图 细分导图 本篇文章是对周志明的《深入理解Java虚拟机》的读书笔记,思维导图使用Mindjet MindManager。曾经看到过这样一句话: 关于教育,有一个经典的定义是:把在学校里学到的东西全部忘掉,最终留下的东西。 我觉得读书也是一样,也可以套用上面的句式: 关于...

AthlenaA的博客 230
上一篇: 深入理解JVM读书笔记——自适应内存管理(一)
下一篇: js实现图片轮播:html+css直接搞定
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值