
JVM
文章平均质量分 94
主要讲解JVM系列的知识
爱吃芝士的土豆倪
世间不如意十之八九。如果没办法一次到位,就分阶段实现吧。
展开
-
JVM系列-9.性能调优
1、通过arthas的trace命令,首先找到性能较差的具体方法,如果访问量比较大,建议设置最小的耗时,精确的找到耗时比较高的调用。2、通过watch命令,查看此调用的参数和返回值,重点是参数,这样就可以在开发环境或者测试环境模拟类似的现象,通过debug找到具体的问题根源。3、原创 2024-01-27 11:09:46 · 1555 阅读 · 0 评论 -
JVM系列-8.GC调优
1、压力比较大的服务中,尽量不要存放大量的缓存或者定时任务,会影响到服务的内存使用。2、内存分析发现有大量线程创建时,可以使用导出线程栈来查看线程的运行情况。3、如果请求确实创建了大量的内存超过了内存上限,只能考虑减少请求时创建的对象,或者使用更大的内存。4、推荐使用g1垃圾回收器,并且使用较新的JDK可以获得更好的性能。原创 2024-01-26 20:02:01 · 1801 阅读 · 0 评论 -
JVM系列-7内存调优
也可以基于线程入手,点开线程的支配树,里面有很多的局部变量,我们得精准的知道,这个线程执行的方法是哪一个。但是由于用户的并发请求量有可能很大,同时处理数据的时间很长,导致大量的数据存在于内存中,最终超过了内存的上限,导致内存溢出。Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。2、如果没有元素,直接放入。原创 2024-01-26 16:36:24 · 1643 阅读 · 0 评论 -
JVM系列-6.java垃圾回收
终结器引用指的是在对象需要被回收时,终结器引用会关联对象并放置在Finalizer类中的引用队列中,在稍后由一条由FinalizerThread线程从队列中获取对象,然后执行对象的finalize方法,在对象第二次被回收时,该对象才真正的被回收。现在这段代码,如果不打开注释的话,可以触发gc上的回收,因为我们使用的是while,当我们的循环进入到下一轮的时候,上一轮创建的三个对象就已经没有人在使用了,那么此时java虚拟机就会把这三个对象回收掉。不同垃圾回收算法,对堆内存的使用方式是不同的。原创 2024-01-25 11:30:36 · 1320 阅读 · 0 评论 -
JVM系列-5.java内存区域
当前类的字节码指令引用了其他类的属性或者方法时,需要将符号引用(编号)转换成对应的运行时常量池中的内存地址。方法出口指的是方法在正确或者异常结束时,当前栈帧会被弹出,同时程序计数器应该指向上一个栈帧中的下一条指令的地址。最终是不想相等的,因为c是指向了字符串常量池中的"12",而d是指向了堆内存中的"12"。Java虚拟机栈随着线程的创建而创建,而回收则会在线程的销毁时进行。used指的是当前已使用的堆内存,total是java虚拟机已经分配的可用堆内存,max是java虚拟机可以分配的最大堆内存。原创 2024-01-23 18:58:29 · 1211 阅读 · 0 评论 -
JVM系列-4.类加载器
一个Tomcat程序中是可以运行多个Web应用的,如果这两个应用中出现了相同限定名的类,比如Servlet类,Tomcat要保证这两个类都能加载并且它们应该是不同的类。如果不打破双亲委派机制,当应用类加载器加载Web应用1中的MyServlet之后,Web应用2中相同限定名的MyServlet类就无法被加载了。Tomcat使用了自定义类加载器来实现应用之间类的隔离。每一个应用会有一个独立的类加载器加载对应的类。先来分析ClassLoader的原理,ClassLoader中包含了4个核心方法。原创 2024-01-22 19:27:07 · 1189 阅读 · 0 评论 -
JVM系列-3.类的生命周期
类的卸载会在垃圾回收篇讲解如果比较细致的区分,会分成七个阶段。原创 2024-01-21 21:32:32 · 1241 阅读 · 0 评论 -
JVM系列-2.字节码文件详解
小李的团队昨天对系统进行了升级修复了某个bug,但是升级完之后发现bug还是存在,小李怀疑是因为没有把最新的字节码文件部署到服务器上,请使用阿里的arthas去确认升级完的字节码文件是不是最新的。Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,大大提升线上问题排查效率。文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。jad 类的全限定名: 反编译已加载类的源码。原创 2024-01-21 17:44:06 · 1411 阅读 · 0 评论 -
JVM系列-1.初识JVM
JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。Java虚拟机主要是将字节码转换成机器码最后将机器码交给计算机去运行从上面就可以看到JVM的一个功能,解释和运行。原创 2024-01-21 17:38:31 · 767 阅读 · 0 评论