专栏名称: 程序员大咖
为程序员提供最优质的博文、最精彩的讨论、最实用的开发资源;提供最新最全的编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE API等等。并不定期奉送各种福利。
目录
相关文章推荐
阿里云云栖号  ·  重磅发布 ... ·  14 小时前  
大淘宝技术  ·  阿里淘天T-Star Lab ... ·  14 小时前  
老刘说NLP  ·  大模型应用推介:多模态RAG、语法纠错、个人 ... ·  17 小时前  
程序猿  ·  还有人手动画图?一键生成 Draw.io ... ·  昨天  
老刘说NLP  ·  再看知识图谱本体生成:RAG用于Mysql数 ... ·  2 天前  
51好读  ›  专栏  ›  程序员大咖

JVM内存的那些事

程序员大咖  · 公众号  · 程序员  · 2016-12-28 19:57

正文

请到「今天看啥」查看全文


1、指针碰撞法


假设Java堆中内存时完整的,已分配的内存和空闲内存分别在不同的一侧,通过一个指针作为分界点,需要分配内存时,仅仅需要把指针往空闲的一端移动与对象大小相等的距离。


2、空闲列表法


事实上,Java堆的内存并不是完整的,已分配的内存和空闲内存相互交错,JVM通过维护一个列表,记录可用的内存块信息,当分配操作发生时,从列表中找到一个足够大的内存块分配给对象实例,并更新列表上的记录。


对象创建是一个非常频繁的行为,进行堆内存分配时还需要考虑多线程并发问题,可能出现正在给对象A分配内存,指针或记录还未更新,对象B又同时分配到原来的内存,解决这个问题有两种方案:


1、采用CAS保证数据更新操作的原子性;
2、把内存分配的行为按照线程进行划分,在不同的空间中进行,每个线程在

Java堆中预先分配一个内存块,称为本地线程分配缓冲(Thread Local Allocation Buffer, TLAB);


Java栈


Java栈是线程私有的,每个线程对应一个Java栈,每个线程在执行一个方法时会创建一个对应的栈帧(Stack Frame),栈帧负责存储局部变量变量表、操作数栈、动态链接和方法返回地址等信息。每个方法的调用过程,相当于栈帧在Java栈的入栈和出栈过程。









请到「今天看啥」查看全文