![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 74
三尺微命 一介书生
这个作者很懒,什么都没留下…
展开
-
VisualVM监控部署在Docker容器中的java项目
有时候程序内存溢出或者做压力测试的时候我们就需要监控我们的程序的运行状况,包括内存使用情况、CPU使用情况等等,Java VisualVM就是监控这些数据的一个很好的工具,它在JDK安装目录的bin目录下。在打开这个工具之前,我们先对我们部署的java项目做一些配置。我这里是使用Docker-Compose对容器进行管理,所以我这里主要就是修改docker-compose.yml文件和docker容器的构建文件Dockerfile。红框中的那一句就是为了使用Java VisualVM实.转载 2021-03-04 17:26:12 · 606 阅读 · 1 评论 -
CPU占用过高问题排查
1.使用 top 定位到占用CPU高的进程PID首先查看系统资源占用信息,TOP看一下,发现正在运行的JAVA项目CPU占用率很高,百分之200左右。2.获取线程信息输出到thread.txt文件,并找到占用CPU高的线程ps -mp pid -o THREAD,tid,time | sort -rn >thread.txt可以看到这个进程中有3个线程的CPU占用率很高,并且它们目前也运行了13分钟了,它们的TID分别为16068,16069,16071。3.将需要的线程I转载 2021-03-04 17:17:50 · 504 阅读 · 1 评论 -
JVM03 - GC垃圾回收机制
一、如何判断垃圾对象当GC要回收某个对象的时候,它是如何判断该对象已死(即不可能再被使用),当一个对象不再被使用时,那么这个对象就是可以被回收的。(1)引用计数算法引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象(不是引用)都有一个引用计数。当一个对象被创建时,且将该对象分配给一个变量,该变量计数设置为1。当任何其它变量被赋值为这个对象的引用时,计数加1(a = b,则b引用的对象+1),但当一个对象的某个引用超过了生命周期或者被设置为一个新值时,对象的引用计数减1。任何引用计数为0原创 2021-03-03 11:25:09 · 136 阅读 · 0 评论 -
JVM02 - JVM内存结构
一、JVM内存结构图JDK1.7以前JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块,是线程共享的区域,由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代的这3种空间年轻代按照8:1:1的比例来分配 方法区存储类信息、常量、静态变量等数据,是线程共享的区域,为与Java堆区分,方法区还有一个别名Non-Heap(非堆) 栈又分为java虚拟机栈和本地方法栈主要用于方法的执行原创 2021-03-03 10:30:53 · 149 阅读 · 1 评论 -
JVM01 - Java类加载机制
一、类加载时机实例化对象,也就是new一个对象 访问某个类或接口的静态变量,或者对该静态变量赋值 调用类的静态方法 反射(Class.forName("com.lyj.load")) 初始化一个类的子类,其父类没有初始化时,会先初始化其父类 JVM启动时标明的启动类,即文件名和类名相同的那个类 二、类的生命周期三、类的类加载过程1. 加载在加载阶段,虚拟机需要完成以下三件事情:通过一个类的全限定名来获取此类的二进制字节流 将这个字节流所代表的静态存储结构转化...原创 2021-03-02 17:42:27 · 111 阅读 · 0 评论