墩墩分墩
博主的一天很枯燥,吃吃饭、睡睡觉、健健身、跑跑步、打打王者、养养猫、溜溜狗、写写博客、打打豆豆啥的。。。。。。
展开
-
【Jvm】看懂字节码指令,了解JVM解析和执行Java代码的过程,对并发编程很有好处
JVM字节码指令是Java虚拟机在执行Java程序时所遵循的一种低级指令集。在.java源文件为.class字节码文件后,存储在字节码文件中的就是这些`字节码指令。该指令在Java虚拟机上运行的,与具体的操作系统和硬件无关,实现了Java语言的“一次编译,到处运行”的特性。一般情况下,Java开发者不需要直接与这些指令打交道,因为它们是由Java编译器自动生成的。但在某些高级场景,如类加载器、字节码操作库(如ASM、Javassist)等中,了解这些指令是非常有用的。原创 2024-03-01 11:40:03 · 991 阅读 · 0 评论 -
【Jvm】走进JVM运行时数据区域(Runtime Data Area):一次深入浅出的探索之旅
Jvm由4个部分组成,分为2个子系统和2个组件,2个子系统为Class loader(类装载)、Execution engine(执行引擎);2个组件为Runtime Data Area(运行时数据区)、Native Interface(本地接口)。Class loader(类加载器):根据给定的全限定名类名(如:Java.lang.Object)来装载class文件到Runtime data area中的method area。Runtime Data Area(运行时数据区域)原创 2024-02-18 16:23:47 · 1340 阅读 · 2 评论 -
【Jvm】类加载机制原理、优化与实战大起底(Class Loading Mechanism):原来还可以这样玩!
**JVM 的类加载器具有父子关系**,双亲委派机制是在`Java 1.2`后引入的,其工作原理的是 **,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器(Bootstrap Class Loader),如果启动类加载器可以完成类加载任务,就成功返回,否则就一层一层向下委派子加载器去尝试加载**,这就是`双亲委派模式`,即`每个儿子都很懒,每次有活就丢给父亲去干,原创 2024-02-18 11:26:38 · 1392 阅读 · 2 评论 -
【Jvm】性能调优(上)线上问题排查工具汇总
- **CPU利用率**:显示的是程序在运行期间实时`占用的CPU百分比`- **CPU负载**:显示的是`一段时间内正在使用和等待使用CPU的平均任务数`。**CPU利用率高,并不意味着负载就一定大**。 - 举例:有个程序需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是`趋近于“1”`,因为`CPU仅负责一个工作嘛`!如果同时执行这样的程序`两个`呢?**CPU的使用率还是100%,但是工作负载则变成2了。所以也就是说,`当CPU的工作负载越大`,代表原创 2024-02-18 10:52:08 · 1277 阅读 · 0 评论 -
【Jvm】性能调优(下)线上问题排查思路汇总
【Jvm】性能调优(上)线上问题排查工具汇总1.合理地配置JVM的运行内存空间 2.使用合适的垃圾回收器。内存空间的分配设置:JVM 内存分配不合理最直接的表现就是频繁 GC,这会导致上下文切换(STW)等性能问题,从而降低系统的吞吐量、增加系统的响应时间。调整堆内存空间减少 Full GC、调整年轻代减少 MinorGC、设置合理的 Eden 和 Survivor 区的比例。选择合适的垃圾回收器:GC主要指堆对象和方法区(元空间)只不过废弃常量和无用的类的回收。对于系统响应时间优先的程序可以选择。原创 2024-02-18 11:24:37 · 1303 阅读 · 0 评论 -
【Jvm】性能调优(拓展)Jprofiler如何监控和解决死锁、内存泄露问题
Jprofilers是针对Java开发的性能分析工具可以对Java程序的内存,CPU,线程,GC,锁等进行监控和分析如果没有Jprofiler这类工具, 在生产环境发生内存泄漏, 去一行一行review所有代码是不现实的, 通过此工具我们可以在较短的时间内定位到导致内存泄漏出现的代码位置, 然后review该位置的代码即可.内存泄漏的难的主要是定位, 解决起来一般比较简单,重启生产环境应用,让服务恢复正常, 然后在把导致内存泄漏的代码优化(原创 2024-02-18 11:28:44 · 1728 阅读 · 0 评论 -
【Jvm】性能调优(中)Java中不得不了解的OOM Error
**在Java中内存相关的问题主要有2种**- **内存泄露 (Memory Leak)**:**申请了内存,但是`没有释放`,导致内存空间浪费**。通俗说法就是`有人占着茅坑不拉屎`。 - **`即应该被GC对象没有被回收`**。通过 JDK的` Jvisualvm 工具`导入`堆快照dump文件`进行分析。- **内存溢出(Out Of Memory)** **申请内存时,JVM没有足够的内存空间**。通俗说法就是`去蹲坑发现坑位满了`。 - **`即内存中的对象确实都是必须存活的`** ,原创 2024-02-18 11:17:01 · 862 阅读 · 0 评论