首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏惊羽-布壳儿

    jdk(4) - JVM内存

    JVM 运行时内存划分 1.1 整体分布 主要分为 : jvm 内存 计数器 : 利用自增特性,主持线程顺次执行栈中的指令; JVM栈 : 由栈帧组成,每个栈帧包含当前方法的入口,返回信息,参数和变量 ,基础类型和对象的引用等; 本地方法栈 : 主要维护JNI相关的信息 堆 : 用于存放程序运行中创建的对象数据; 本地内存 元数据区 : 用于存放永久对象的区域; 直接内存 : 用于存放堆外内存, 直接使用操作系统本身内存的区域(如 NIO部分类库实例); image.png 图中,绿色为线程私有的,换色则属线程公用; 1.2 堆内存划分 年轻代 Eden : 新对象的存放之地;占用内存达到阈值后会触发 servivor0 : 幸存区,用于youngGC时,临时存放幸存的对象; servivor1 : 同servivor0; servivor0, servivor1 配合Eden,使得youngGC时,不产生内存碎片 ,同时保证了新生内存都在Eden区; 参考文章 : 为什么JVM新生代中有两个survivor?

    80110编辑于 2022-06-15
  • 来自专栏杨不易呀

    【JMM内存模型-4】JMM内存模型之CPU缓存策略

    CPU缓存策略原理 缓存概述 CPU为了提升执行效率,减少CPU与内存的交互(交互影响CPU效率),一般在CPU上集成了多级缓存架构 cpu缓存策略图 cpu读取数据时, 会先从自己的寄存器当中读取. 如果没有再从Cache当中读取数据.如果Cache当中也没能.再从内存当中获取.然后再依次缓存 多核CPU结构图 三级缓存 L1 Cache 分为数据缓存和指令缓存,逻辑核独占 CPU所有操作的数据全部在寄存器当中完成 Registers(寄存器组) `<1ns` L1 cache (一级缓存) `约1ns` L2 cache(二级缓存) `约3ns` L3cache(三级缓存) `约15ns` 主内存 计算机当中为了让效率更高,在读取数据时,是一块一块进行读取的 3. cache Line能够读取的大小是64个字节 cpu缓存一致性问题 假设cpu1从主内存当中读取一个共享数据i = 1,读取到cache 当中 进行数据的修改,把i修改为2 一、同时同一个cpu也从内存当中读取数据 此时读取的结构可能是1也可能是2 如果cpu1把写的结果写到到内存中, cpu2读取的就是2 如果cpu1没有把结果写回到主内存当中

    92120编辑于 2022-01-19
  • 来自专栏云前端

    JS的内存管理及4种常见的内存泄漏

    举例来说,看一下以下声明: int n; // 4 bytes int x[4]; // array of 4 elements, each 4 bytes double m; // 8 bytes 编译器立刻就能算出这部分代码需要的空间 4 + 4 × 4 + 8 = 28 bytes. 在以上例子中,编译器清楚的制度每个变量所需内存。事实上,每当我们写入变量 n 时,这个变量在内部就被翻译成类似“内存地址4127963”了。 如果试图访问这里的 x[4] , 就会访问关联数据 m。 // 由 a1 和 a2 的元素串联成新的 4 个元素的数组 Using memory in JavaScript - 在JS中使用内存 在JS中使用内存,基本上就意味着对其读写。 'o2' 属性仍被 'o4' 变量引用,所以不能被释放 o4 = null; // 原本被 'o1' 引用的对象可以被gc了 Cycles are creating problems - 循环引用带来问题

    1.5K30发布于 2020-06-15
  • 来自专栏linux驱动个人学习

    Linux-3.14.12内存管理笔记【构建内存管理框架(4)】

    虽说前文分析内存管理框架构建的实现,提到了find_zone_movable_pfns_for_nodes(),但这里不准备复述什么,仅针对required_movablecore和required_kernelcore

    97420发布于 2019-10-08
  • 来自专栏闵开慧

    让XP支持4G内存

      4G内存已经成为很多中高档笔记本电脑的标准配置。前两篇文章介绍了WIN7系统4G内存的破解过程和4G内存的完美利用。但是,很多朋友还是习惯用32位 XP系统。 那么能不能让32位 XP系统也能完美支持4G内存呢,当然也是可以的。今天,我们就来介绍如何在32位XP系统完美破解4G内存限制。 第二步、安装内存盘   开启了PAE,并没有破解4G内存限制。需要利用多余的1G内存建立内存盘使用,就能完美利用全部4G内存了。 ,加上3G的系统使用内存,刚好为4G,全部使用。 成功设置xp支持4g内存 现在内存很便宜,不想换系统又想用上4G,这是在网上找到的.不知有谁用过.效果怎样?

    8.4K110发布于 2018-03-30
  • 来自专栏精讲JAVA

    Java 虚拟机 4内存溢出

    www.cnblogs.com/xrq730/p/4833713.html 堆溢出 Java堆唯一的作用就是存储对象实例,只要保证不断创建对象并且对象不被回收,那么对象数量达到最大堆容量限制后就会产生内存溢出异常了 解决方案的话,可以调大堆的大小或者从代码上检视是否存在某些对象生命周期过长、持有状态时间过长的情况,长时间少程序运行期间的内存消耗。 上面无限产生线程的场景,从另外一个角度说,就是为每个线程的栈分配的内存空间越大,反而越容易产生内存溢出。其实这也很好理解,操作系统分配给进程的内存是有限制的,比如32位的Windows限制为2GB。 虚拟机提供了了参数来控制Java堆和方法区这两部分内存的最大值,剩余内存为2GB-最大堆容量-最大方法区容量,程序计数器很小就忽略了,虚拟机进程本身的耗费也不算,剩下的内存就是栈的了。 每个线程分配到的栈容量越大,可建立的线程数自然就越少,建立线程时就越容易把剩下的内存耗尽。 StackOverFlowError这个异常,有错误堆栈可以阅读,比较好定位。

    1K20发布于 2018-07-30
  • 来自专栏架构师成长之路

    GO进阶(4) 深入Go的内存管理

    32位机器可以直接寻址4G空间,意思是每个应用程序都有4G内存空间可用。 虚拟内存一般分为以下4大块: 1,栈空间:特点是内存地址连续,先进后出,里面放了局部变量、函数形参、自动变量。 ,该策略会将内存分割成由 4、8、16、32 字节的内存块组成的链表,当我们向内存分配器申请 8 字节的内存时,它会在上图中找到满足条件的空闲内存块并返回。 如上图所示,微分配器已经在 16 字节的内存块中分配了 12 字节的对象,如果下一个待分配的对象小于 4 字节,它会直接使用上述内存块的剩余部分,减少内存碎片,不过该内存块只有所有对象都被标记为垃圾时才会回收 4、大对象 运行时对于大于 32KB 的大对象会单独处理,我们不会从线程缓存或者中心缓存中获取内存管理单元,而是直接调用 runtime.mcache.allocLarge 分配大片内存: func goroutine会占用4GB。     

    1.1K10编辑于 2023-02-27
  • 来自专栏数据库相关

    redis4的自动内存整理

    redis4里面自带了内存整理,可以避免内存碎片率过大的问题。 active_defrag_running:0 lazyfree_pending_objects:0 可以看到  mem_fragmentation_ratio 从1.48 降低到了1.21了 redis4 defragmentation # 碎片整理总开关 # activedefrag yes # Minimum amount of fragmentation waste to start active defrag # 内存碎片达到多少的时候开启整理

    2.1K20发布于 2019-09-17
  • 来自专栏技术杂记

    Percona Server 5.1 内存过量消耗分析4

    由于 innodb_buffer_pool_size 和 query_cache_size 都是我手动配置的,所以这个差异报告让我立刻注意到了 innodb_ibuf_max_size

    78610编辑于 2022-07-09
  • 来自专栏独行猫a的沉淀积累总结

    log4qt内存泄露问题,heob内存检测工具的使用

    log4qt,是大名鼎鼎的阿帕奇的java日志库log4j的qt移植版。本是挺常用的开源库,然而在使用过程中发现了内存泄露的坑。 为了验证下,这里单独写了个测试demo,并使用qtcreator集成的hoeb内存泄露检测工具分析下。 测试用例很简单,就是一个MainWindow界面上放置两个按钮。 heob覆盖被调用进程的堆函数,以检测缓冲区溢出和内存泄漏。 在缓冲区溢出时,将引发访问冲突,并提供有问题的指令和缓冲区分配的堆栈跟踪。但heob.exe还是需要单独下载的。 QT是好用,但是它的半自动化的内存托管方式是把双刃剑,平常你的new都很小心的对内存操作,记得释放。但是用了qt且习惯了它,它容易让你养成坏习惯。 引用 Visual Studio查看C++内存泄漏方法_wangshenqiang的博客-CSDN博客_vs内存泄露怎么查

    2.8K10编辑于 2022-07-28
  • 来自专栏web秀

    JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏

    使用内存 — 这是程序实际使用之前分配的内存,在代码中使用分配的变量时,就会发生读和写操作。 释放内存 — 释放所有不再使用的内存,使之成为自由内存,并可以被重利用。 因为当调用函数时,它们的内存将被添加到现有内存之上,当它们终止时,它们按照后进先出(LIFO)顺序被移除。例如: ? 编译器能够立即知道所需的内存:4 + 4×4 + 8 = 28字节。 这段代码展示了整型和双精度浮点型变量所占内存的大小。但是大约20年前,整型变量通常占2个字节,而双精度浮点型变量占4个字节。你的代码不应该依赖于当前基本数据类型的大小。 注意,如果我们尝试访问 x[4],将访问与m关联的数据。这是因为访问数组中一个不存在的元素(它比数组中最后一个实际分配的元素x3多4字节),可能最终读取(或覆盖)一些 m 位。 4.脱离DOM的引用 有时,将DOM节点存储在数据结构中可能会很有用。假设你希望快速地更新表中的几行内容,那么你可以在一个字典或数组中保存每个DOM行的引用。

    1.5K40发布于 2019-10-09
  • 来自专栏Java后端修炼

    JVM 学习笔记(4):内存分配与回收策略

    1、对象优先在 Eden 区分配 一般情况下,对象都优先在新生代的 Eden 区中分配,当 Eden 内存不足时将会发起一次 Minor GC。 2、大对象直接进入老年代 大对象指的是占用大量连续内存的 Java对象,例如长字符串、长数组等,这些大对象的内存分配可能会遭遇总空间充足但连续空间不足而无法分配的情况,或者在复制对象时产生高昂的成本,因此在 4、动态对象年龄判定 为了适应内存实际情况,如果在 Survivor 中相同年龄所有对象大小的总和大于 Survivor 的一半,则大于或等于该年龄的对象可以直接进入老年代,无需达到阈值要求。

    42130编辑于 2022-09-20
  • 来自专栏Super 前端

    JavaScript的工作原理:内存管理+如何处理4个常见的内存泄漏

    int n; // 4 bytes int x[4]; // array of 4 elements, each 4 bytes double m; // 8 bytes 编译器可以立即计算diam所有内存空间为 : 4 + 4 + 4 × 4 + 8 = 28 bytes 4+4×4+8=28bytes 这是现在整数和双精度的工作原理。 上述示例中,编译器知道每个变量的确切内存地址。实际上,每当我们写入变量时,它就会会内部转为类似”内存地址 4127963“的内容。 注意,如果尝试访问x[4],可能会访问到和 m 相关联的数据。 这是因为我们访问的元素在数组中并不存在 — 它比数组中最后一个实际分配的元素x[3]多4个字节,可能会读取(或重写) m 的位。这肯定会对程序产生难以理解的不良影响。

    1.2K30发布于 2021-08-30
  • 来自专栏Super 前端

    JavaScript的工作原理:内存管理+如何处理4个常见的内存泄漏

    int n; // 4 bytes int x[4]; // array of 4 elements, each 4 bytes double m; // 8 bytes 编译器可以立即计算diam所有内存空间为 :4+4×4+8=28bytes4 + 4 × 4 + 8 = 28 bytes4+4×4+8=28bytes 这是现在整数和双精度的工作原理。 大约 20 年前,整数通常为 2 字节,双精度为 4 字节。你的代码永远不必依赖于此时基本数据类型的大小。 编译器将插入与操作系统交互的代码,以便在堆栈中请求要存储的变量所需的字节数。 上述示例中,编译器知道每个变量的确切内存地址。实际上,每当我们写入变量时,它就会会内部转为类似”内存地址 4127963“的内容。 注意,如果尝试访问x[4],可能会访问到和 m 相关联的数据。 这是因为我们访问的元素在数组中并不存在 — 它比数组中最后一个实际分配的元素x[3]多4个字节,可能会读取(或重写) m 的位。这肯定会对程序产生难以理解的不良影响。 ?

    1.4K51发布于 2019-08-15
  • 来自专栏Dissecting Unreal

    Rider For UE4内存不足问题

    Rider默认配置的内存很少,如果开比较大UE4工程,用默认配置很可能顿卡非常明显。因为本身这个IDE是Java的,卡死的时候会发现IDE后台一直在GC。 如果自己机器内存本身比较大,可以调整一些启动参数让IDE使用更多的内存,别那么容易进入GC,这样就能非常顺滑的编码了。 到Rider的根目录,打开这个文件 把对应参数调整成这样 前面2个是调整Java堆内存的最小值和最大值,调大了不容易gc 第3个是调整编译代码缓存大小,这个越高,据说JIT的代码量就会越大(非专业理解 ,反正调大一些更快就是了) 第5个默认没有,可以额外加上去,可要可不要,Java也支持像Lua那样全局共用相同的字符串,这个加上也能省不少内存

    4.6K30编辑于 2021-12-28
  • 来自专栏GPUS开发者

    NVFP4:打破GPU推理的内存墙,4位浮点时代来了

    从痛点说起:为什么4位精度成为刚需? AI推理的内存挑战是多维度的。首先是模型权重本身的庞大体积。 INT4整数量化虽然内存效率高 ,但精度损失显著 ,往往需要复杂的校准流程和混合精度策略才能勉强保持模型性能。FP8浮点格式改善了精度 ,但1.8倍的内存节省对于超大模型来说依然不够激进。 NVIDIA在设计NVFP4时明确了三个目标:将内存占用压缩到极致、保持与FP8相当的模型精度、在Tensor Core上实现原生硬件加速。 首先是适用场景的判断:NVFP4特别适合推理密集、内存受限的场景 ,如大batch推理服务、长上下文对话、边缘设备部署。 当内存墙不再是瓶颈 ,GPU开发者将有更大的空间去探索模型规模、上下文长度、多模态融合的边界。4位浮点时代已经来临 ,你准备好了吗?

    1.6K10编辑于 2026-01-27
  • 来自专栏芋道源码1024

    4 个关于Java 虚拟机内存的问题?

    JVM的内存区域是怎么划分的? JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础。 该内存区域是唯一一个在Java虚拟机规范中没有规定任何OOM情况的内存区域。 直接内存虽然不是虚拟机运行时数据区的一部分,但既然是内存,就会受到物理内存的限制。在JDK1.4中引入的NIO使用Native函数库在堆外内存上直接分配内存,但直接内存不足时,也会导致OOM。 堆内存结构是怎么样的? 可以借助一些工具来了解JVM的内存内容,具体到特定的内存区域,应该用什么工具去定位呢? 图形化工具。

    79610发布于 2019-05-16
  • 来自专栏java一日一条

    JavaScript 内存泄露的4种方式及如何避免

    本质上,内存泄露可以定义为:应用程序不再需要占用内存的时候,由于某些原因,内存没有被操作系统或可用内存池回收。编程语言管理内存的方式各不相同。只有开发者最清楚哪些内存不需要了,操作系统可以回收。 另一些则寄希望于开发者对内存是否需要清晰明了。 JavaScript 内存管理 JavaScript 是一种垃圾回收语言。垃圾回收语言通过周期性地检查先前分配的内存是否可达,帮助开发者管理内存。 换言之,垃圾回收语言减轻了“内存仍可用”及“内存仍可达”的问题。两者的区别是微妙而重要的:仅有开发者了解哪些内存在将来仍会使用,而不可达内存通过算法确定和标记,适时被操作系统回收。 JavaScript 内存泄露 垃圾回收语言的内存泄露主因是不需要的引用。理解它之前,还需了解垃圾回收语言如何辨别内存的可达与不可达。 由于代码保留了 的引用,导致整个表格仍待在内存中。保存 DOM 元素引用的时候,要小心谨慎。 4:闭包 闭包是 JavaScript 开发的一个关键方面:匿名函数可以访问父级作用域的变量。

    5.4K52发布于 2018-09-18
  • 来自专栏Android 研究

    Java虚拟机基础——4内存回收机制

    Java虚拟机整体篇幅如下: Java虚拟机基础——1Java的内存模型 Java虚拟机基础——2JVM运行时数据区 Java虚拟机基础——3类加载机制 Java虚拟机基础——4内存回收机制 本篇文章的内容如下 : 1 概述 2 垃圾回收的思考 3 那些内存需要回收 4 垃圾收集算法 5 Stop the World事件 6 垃圾收集器 一、概述 在Java中,它的内存管理包括两方面:内存分配(创建Java的时候 - 标记清楚算法 - 复制算法 - 标记整理算法 分代收集算法 Stop-the-world 7种垃圾收集器 - 1 标记-清除收集器 - 2 标记-压缩收集器 - 3 复制收集器 - 4 4、小结 由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。垃圾回收有两种类型,Minor GC 和Major GC/Full GC。 Minor GC:对新生代进行回收,不会影响到老年代。 4、动态对象年龄判定 为了更好地适应不同程序的内存状况,虚拟机并不是永远地要求对象年龄必须达到MaxTenuringThreshold才能晋升到老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于

    71220发布于 2018-10-10
  • 来自专栏MelonTeam专栏

    Fresco 4.X和5.X内存分析

    两年前部落项目接入Fresco的时候,那时候主流机型还是4.X。Fresco在4.X的机器的内存性能很好,Bitmap存在Ashmem(匿名共享内存)层里面的,对应用的内存缓存的压力不大。 4.X系统的Fresco ? 安卓系统的Ashmem层这里不做过多介绍,我们来看下缓存到Ashmem最后一个JAVA函数。 为了解决这种卡顿,Fresco调用AndroidBitmap_lockPixels这个native方法锁住这块内存,锁住这块内存之后GC便不会对该内存生效,因此就不会有在主线程重编码的卡顿问题了。 Fresco需要自己进行这块内存的管理。 经过对Fresco内存缓存系统的分析,我们可以看到CountingMemoryCache这个内存缓存类里面实际上是包含两块内存区域的。 ?

    1.5K80发布于 2018-01-04
领券