JVM
dragon@oo
糟糕的坚持也好过放弃
展开
-
JVM内存详解
JVM的内存区域划分JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础。那么JVM内存区域是怎么划分的呢?程序计数器(Program Counter Register):在JVM规范中,每个线程都有自己的程序计数器。这是一块比较小的内存空间,存储当前线程正在执行的Java方...转载 2019-07-22 14:05:39 · 246 阅读 · 0 评论 -
JVM类加载机制、破坏双亲委派
JVM类加载机制我们从下面三个方面介绍一下,即 类加载过程、初始化类的顺序和类加载器JVM类加载过程要想使用一个Java类为自己工作,必须经过以下几个过程,类加载 -> 连接(验证 -> 准备 -> 解析)-> 类初始化,下面分别介绍:1)类加载load从字节码二进制文件——.class文件将类加载到内存,从而达到类的从硬盘上到内存上的一个迁移,所有的程序...原创 2019-06-20 16:54:46 · 1366 阅读 · 1 评论 -
JVM常用调优方法
一、常用调优方法1、将新对象预留在新生代由于 Full GC 的成本要远远高于 Minor GC ,因此尽可能将对象分配在新生代,在JVM 调优中,可以为应用程序分配一个合理的新生代空间,以最大限度避免新对象直接进去老年代。注意:由于新生代垃圾回收的速度高于老年代回收,因此,将年轻对象预留在新生代有利于提高整体的 GC 效率2、大对象进入老年代大对象占用空间多,直接放入...原创 2019-06-13 16:36:43 · 10125 阅读 · 0 评论 -
JVM内存模型
JVM 虚拟机内存模型是java程序运行的基础,JVM 虚拟机将内存数据分为程序计数器、虚拟机栈、本地方法栈、Java堆和方法区等部分。如下图所示:程序计数器:存放下一条运行的命令,各个线程之间的计数器互不影响,独立工作,是一块线程私有的内存空间。如果当前线程正在执行一个java方法,则程序计数器记录正在执行的 java 字节码地址,如果当前线程正在执行一个 Native 方法,则程序计数...原创 2019-06-13 16:35:23 · 125 阅读 · 0 评论 -
JVM常用查看资源命令
一、linux命令1、top命令top命令能够实时显示系统中各个进程的资源占用状况,可以从宏观上观察系统各个进程对 CPU 的占用情况以及内存使用情况,各个参数意义如下:2、sar命令sar 命令可以周期的对内存和 CPU 使用情况进行采样,基本语法如下:sar [options] [<interval> <count>]其中...原创 2019-06-13 16:34:38 · 688 阅读 · 0 评论 -
JVM垃圾回收算法和回收器
一、垃圾回收算法:1、引用计数法 引用计数法就是对于一个对象A,只要有任何一个对象引用了A,则A的计数器就加1,当引用失效时就减1。只要对象A的计数器数值为0,将会被回收。注意:无法处理循环引用的问题,引用计数法不适合JVM的垃圾回收2、标记--清除算法(Mark--Sweep)标记清除算法就是先通过根节点标记所有可到达的对象,然后清除所有不可达的对象,完成垃圾回...原创 2019-06-13 16:28:47 · 1124 阅读 · 0 评论 -
CPU占用过高排查
CPU占用过高排查步骤1、top命令查看应用占用CPU情况: top2、确定是否是 tomcat 的 java 进程 : ps aux|grep pid3、显示该进程的线程列表,确定那个线程占用CPU过高: ps -mp pid -o THREAD,tid,time4. 将线程 tid 进行16进制转换: printf "%x\n" tid 5、显示堆栈信息,定位问题代...原创 2019-06-13 15:43:17 · 1629 阅读 · 0 评论 -
OOM排查
OOM排查过程步骤1、先查看应用进程号pid: ps -ef | grep 应用名 2、查看pid垃圾回收情况:jstat -gc pid 5000(时间间隔)即会每5秒一次显示进程号为68842的java进成的GC情况,显示内容如下图:结果说明:显示内容说明如下(部分结果是通过其他其他参数显示的,暂不说明):S0C:年轻代中第一个survivor(幸...原创 2019-06-13 15:35:32 · 17531 阅读 · 0 评论