内存管理
文章平均质量分 55
zhongxiangbo
这个作者很懒,什么都没留下…
展开
-
多线程之指令重排序
一、为什么会乱序现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回、等若干个阶段。然后,多条指令可以同时存在于流水线中,同时被执行。指令流水线并不是串行的,并不会因为一个耗时很长的指令在“执行”阶段呆很长时间,而导致后续的指令都卡在“执行”之前的阶段上。相反,流水线是并行的,多个指令可以同时处于同一个阶段,只要CPU内部相应的处理部件未被占转载 2017-05-01 08:42:40 · 818 阅读 · 0 评论 -
深入分析 ThreadLocal 内存泄漏问题
前言ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析ThreadLocal内存泄漏的问题ThreadLocal实现原理ThreadLocal为什么会内存泄漏ThreadLo转载 2017-04-27 16:08:12 · 502 阅读 · 2 评论 -
JVM的组成和垃圾回收机制
1.JVM的组成 JVM定义了控制Java代码解释执行和具体实现的五种规格,因此把JVM分成了6个部分:JVM解释器、指令系统、寄存器、栈、存储区和碎片回收区。 ◆JVM解释器:即这个虚拟机处理字段码的CPU。 ◆JVM指令系统:该系统与计算机很相似,一条指令由操作码和操作数两部分组成。操作码为8位二进制数,主要是为了说明一条指令的功能,操作数可以转载 2017-04-27 22:37:07 · 235 阅读 · 0 评论 -
Java垃圾收集器
理解java垃圾回收机制有什么好处呢?作为一个软件工程师,满足自己的好奇心将是一个很好的理由,不过更重要的是,理解GC工作机制可以帮助你写出更好的Java应用程序。这是我个人的主观观点,但我相信一个人精通了GC,往往会是一个更好的Java程序员。如果你对GC感兴趣,那就意味着你有一定大规模应用开发的经验。如果你已经仔细过考虑选择合适的GC算法,这意味着你完全理解你开发的应用程序的功能。当然转载 2017-04-27 22:42:00 · 277 阅读 · 0 评论 -
判断Java对象是否存活的方法
jvm堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还“存活”着,哪些对象已经“死去”(即不可能再被任何途径使用的对象),哪用什么办法去确认这些对象存活与否。在主流的商用程序语言中(Java和C#等),都是使用可达性分析算法(Reachability Analysis)来判断对象是否存活的,但是又有很多人又认为是用引用计数算法(Refer原创 2017-04-27 22:46:50 · 1009 阅读 · 0 评论 -
理解Java内存模型
Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理转载 2017-04-27 23:11:41 · 219 阅读 · 0 评论 -
Java内存管理:深入Java内存区域
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 概述: 对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝,又是从事最基础工作的劳动人民—既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。 对于Java程序员来说,在虚拟机的自动内存管理机制转载 2017-04-27 23:13:03 · 228 阅读 · 0 评论 -
JVM性能调优
1、JVM调优目标:使用较小的内存占用来获得较高的吞吐量或者较低的延迟。程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpu load过高、请求延迟、tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越来越少)、内存溢出导致系统崩溃,因此需要对JVM进行调优,使得程序在正常运行的前提下,获得更高的用户体验和运行...转载 2019-01-02 22:52:08 · 165 阅读 · 0 评论