JVM
文章平均质量分 93
一只倔强的蜗牛
编码人生,深耕技术
展开
-
垃圾收集器与内存分配策略系列(五)
实战:内存分配策略1. 对象优先在Eden分配2. 大对象直接进入老年代3. 长期存活的对象将进入老年代1. 对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起 一次Minor GC。HotSpot虚拟机提供了-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在发生垃圾收集行为时打印内存回收日志,并且在进程退出的时候输出当前的内存各区域分配情况。在实际的问题排查 中,收集器日志常会打印到文件后通过工具进行分析。在下列代原创 2021-04-07 23:09:20 · 117 阅读 · 0 评论 -
垃圾收集器与内存分配策略系列(四)
虚拟机及垃圾收集器日志阅读分析虚拟机和垃圾收集器的日志是处理Java虚拟机内存问题必备的基础技能,垃圾收集器日 志是一系列人为设定的规则,多少有点随开发者编码时的心情而定,没有任何的“业界标准”可言,换 句话说,每个收集器的日志格式都可能不一样。除此以外还有一个麻烦,在JDK 9以前,HotSpot并没 有提供统一的日志处理框架,虚拟机各个功能模块的日志开关分布在不同的参数上,日志级别、循环日志大小、输出格式、重定向等设置在不同功能上都要单独解决。直到JDK 9,这种混乱不堪的局面 才终于消失,HotSp原创 2021-04-06 22:48:22 · 104 阅读 · 0 评论 -
垃圾收集器与内存分配策略系列(三)
经典垃圾收集器1. Serial收集器2. ParNew收集器3. Parallel Scavenge收集器4. Serial Old收集器5. Parallel Old收集器6. CMS收集器7. Garbage First(G1)收集器1. Serial收集器Serial收集器是最基础、历史最悠久的收集器。这个收集器是一个单线程工作的收集器,但它的“单线 程”的意义并不仅仅是说明它只会使用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是强调在它进行垃圾收集时,必须暂停其他所有工作线程,直到它原创 2021-04-05 22:54:22 · 130 阅读 · 0 评论 -
垃圾收集器与内存分配策略系列(二)
垃圾收集器与内存分配策略系列(二)1. 垃圾收集算法1.1. 分代收集理论1.2. 标记-清除算法1.3. 标记-复制算法1.4. 标记-整理算法1. 垃圾收集算法从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接 垃圾收集”。由于引用计数式垃圾收集算法在主流Java虚拟机中均未涉及,所以以下讨论的所有垃圾回收算法均属于追踪式垃圾收集的范畴。原创 2021-04-05 12:32:27 · 122 阅读 · 0 评论 -
垃圾收集器与内存分配策略系列(一)
1. GC概述经过半个世纪的发展,今天的内存动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去了解垃圾收集和内存分配?答案很简单:当需要排查各种内存 溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在原创 2021-04-05 09:36:26 · 63 阅读 · 0 评论 -
线程安全与锁优化
1. 线程安全1.1. 什么是线程安全线程安全的代码必须都具备一个特征:代码本身封装了所有必要的正确性保障手段(如互斥同步等),令调用者无须关心多线程的问题,更无须自己实现任何措施来保证多线程的正确调用。1.2. 线程安全的实现方法...原创 2021-03-09 16:18:29 · 180 阅读 · 0 评论 -
Java 内存模型与线程
1. 概述并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力最有力的武器。Amdahl定律通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力,摩尔定律则 用于描述处理器晶体管数量与运行效率之间的发展关系。这两个定律的更替代表了近年来硬件发展从追求 处理器频率到追求多核心并行处理的发展过程。2.硬件的效率与一致性物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物理机对并发的处理方案对虚拟机的实现也有相当.原创 2021-03-06 23:31:21 · 139 阅读 · 0 评论 -
你应该知道的 volatile 关键字
前言不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。首先来看看为什么会出现这个关键字。内存可见性由于 Java 内存模型(JMM)规定,所有的变量都存放在主内存中,而每个线程都有着自己的工作内存(高速缓存)。线程在工作时,需要将主内存中的数据拷贝到工作内存中。这样对数据的任何操作都是基于工作内存(效率提高),并且不能直接操作主内存以及其他线程工作内存中的数据,之后再将更新之后...转载 2018-07-05 14:46:43 · 134 阅读 · 0 评论 -
全面理解Java内存模型(JMM)及volatile关键字
转载自:http://blog.csdn.net/javazejian/article/details/72772461 关联文章:深入理解Java类型信息(Class对象)与反射机制深入理解Java枚举类型(enum)深入理解Java注解类型(@Annotation)深入理解Java类加载器(ClassLoader)深入理解Java并发之synchronized实现原...转载 2018-07-05 12:40:53 · 157 阅读 · 0 评论 -
JVM的内存区域划分(面试问题:你了解java内存模型么)
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: ...转载 2018-06-27 18:12:22 · 199 阅读 · 0 评论 -
JVM系列三:JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个...转载 2018-07-02 11:21:37 · 105 阅读 · 0 评论