JVM
JVM调优
死牛胖子
在技术的路上渐行渐远
展开
-
深入理解Java虚拟机(4) - 垃圾收集器
###Serial收集器 最基本,历史最悠久的收集器,曾经(在JDK1.3.1之前)是虚拟机新生代收集的唯一选择。 采用复制算法的新生代收集器,Client模式下默认的新生代收集器。 Serial / Serial Old收集器都是单线程的收集器,进行垃圾收集时,必须暂停其他所有的工作线程,直到收集结束。 优点:简单高效 缺点:会造成程序卡顿,如果经常卡顿,应该会疯掉原创 2017-02-21 20:17:26 · 288 阅读 · 0 评论 -
深入理解Java虚拟机(5) - 内存分配与回收策略
对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配,当Eden区没有足够的空间进行分配时,虚拟机将发起一次MinorGC。大对象直接进入老年代虚拟机提供了一个-XX:PretenureSizeThreshold参数,令大于这个设置值的对象直接在老年代中分配。这样做的目的是避免在Eden区及两个Survivor区之间发生大量的内存拷贝。长期存活的对象将进入老年代虚拟机给每个对象定义了一个原创 2017-02-21 20:19:38 · 287 阅读 · 0 评论 -
深入理解Java虚拟机(2) - 根搜索算法
这个系列文章是对《深入理解Java虚拟机》一书的笔记及个人理解 垃圾收集(Garbage Collection,GC)需要完成三件事件 1、哪些内存需要回收? 2、什么时候回收? 3、如何回收? Java虚拟机要进行GC,首先要确定哪些内存需要回收,但是GC时,Java程序依然是在运行当中,所以,如果将程序需要的对象回收了,就会造成程序出错。那么,怎么在Java堆中的众多对象中找出哪原创 2017-02-21 19:47:00 · 436 阅读 · 0 评论 -
深入理解Java虚拟机(1) - JAVA内存区域
这个系列文章是对《深入理解Java虚拟机》一书的笔记及个人理解 Java是简单的,相对于C和C++,Java因为拥有自动内存管理机制而显示更加简单。Java程序员不用为每一个new操作去写配对的delete/free代码,而且不容易出现内存泄漏和内存溢出问题。这一切的美好不是因为Java就不存在内存的问题,而是Java将内存控制权托管给了Java虚拟机。JAVA内存区域Java虚拟机在执行Java程原创 2017-02-21 19:31:53 · 422 阅读 · 0 评论 -
深入理解Java虚拟机(8) - 类加载器
类加载器用于实现类的加载动作。对于任意一个类,需要由类加载器及类本身一同确立其在Java虚拟机中的唯一性。通俗地说就是同一个类加载器的加载范围内,类只会被加载一次,但在不同的类加载器中,类会被多次加载。类加载器分为两种: 启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机的一部分,启动类加载器无法被Java程序直接引用。 其它类加载器,这些类加载器都原创 2017-11-15 22:58:58 · 196 阅读 · 0 评论 -
深入理解Java虚拟机(7) - 类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言里,类加载和连接过程都是在程序运行期间完成的,这样会在类加载时稍微增加一些性能开销,但是却能为Java应用程序提供高度的灵活性,Java中天生可以动态扩展的语言特性就是依赖运行期动态加载连接这个特点实现的。类的生命周期类从被加载到虚拟原创 2017-11-15 21:58:09 · 160 阅读 · 0 评论 -
深入理解Java虚拟机(6) - 虚拟机性能监控
jps:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 jstat:JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 jinfo:Configuration Info For Java,显示虚拟机配置信息 jmap:Memory Map For Java,生成虚拟机的内存转储快照原创 2017-02-21 20:20:12 · 268 阅读 · 0 评论 -
深入理解Java虚拟机(3) - 垃圾收集算法
标记清除算法最基础的收集算法,后续算法都是基于这个算法进行改进。如它的名字一样,算法分为”标记”和”清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一处理掉所有被标记的对象。缺点: 1、效率低,标记和清除效率都不高 2、空间问题,清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致,当程序需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。运行过程如下图原创 2017-02-21 20:14:05 · 295 阅读 · 0 评论