JVM
一个技术渣渣
这个作者很懒,什么都没留下…
展开
-
JVM性能调优监控工具jps、jstack、jmap、jhat、hprof使用详解
现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ......这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必...原创 2020-04-28 09:11:14 · 274 阅读 · 0 评论 -
触发FullGC的几个条件
1.年轻代存活的对象太多,老年代了放不下01.示例代码public class DemoTest1 { public static void main(String[] args) { byte[] array1 = new byte[4 * 1024 * 1024]; array1 = null; byte[] array2 ...原创 2020-04-09 23:06:28 · 2671 阅读 · 0 评论 -
JVM类加载过程与双亲委派
Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。类加载过程加载类加载过程的第一步,主要完成下面3件事情: 通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为...原创 2020-03-24 01:04:12 · 200 阅读 · 0 评论 -
Java性能调优
某项目进行上线前的性能压测时,发现进程的内存占用率会持续升高,与之而来的时,性能的接口性能的持续下降。最奇怪的是,停止压测后CPU和内存开销并没有恢复过来。在讲述整个过程前,请大家自备两个梯子:1)Java虚拟机的垃圾回收机制2)jmeter的基本使用知识首先下载jmeter工具,感觉是一个轻量级的性能检测工具,很好用。有基于windows 的GUI版本,也有在linux上运...原创 2020-03-15 22:10:10 · 796 阅读 · 0 评论 -
分析占用了大量 CPU 处理时间的是Java 进程中哪个线程
下面是详细步骤:1. 首先确定进程的 ID ,可以使用 jps -v 或者 top 命令直接查看2. 查看该进程中哪个线程占用大量 CPU,执行 top -H -p [PID] 结果如下:可以发现编号为 350xx 的共有 9 个线程占用了 100% 的 CPU,好,接下来咱们随便取一个线程 ID ,假设我们想看编号为 35053 这个线程。首先将 35053 转成 16 进制...原创 2020-03-15 21:48:22 · 163 阅读 · 0 评论 -
Memory Analyzer排查内存溢出
一、jmap 的使用首先,需要使用 jmap 工具生成 dump 文件。jmap是java自带的工具1. 查看整个JVM内存状态jmap -heap [pid]pid 为 java 进程号,可使用jps 或者 linux 命令行查看,通过ps -ef | grep java得到如上线程将某线程终止时用kill -9 XXXXX XXXXX为上述查出...原创 2020-03-15 20:31:12 · 1824 阅读 · 0 评论 -
OOM常见原因及解决方案
当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误。本文总结了常见的 OOM 原因及其解决方法,如下图所示。如有遗漏或错误,欢迎补充指正。1、Java heap space当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出 java.lang.OutOfMemoryError:Javaheap space ...原创 2020-03-15 17:12:55 · 1571 阅读 · 0 评论 -
Java 内存溢出(java.lang.OutOfMemoryError)总结
在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域)、Heap space(堆区域)、Java Stacks(Java栈)。其中永久保存区域主要存放Class(类)和Meta的信息,Class第一次被Load的时候被放入PermGen space...原创 2020-03-10 17:29:04 · 850 阅读 · 0 评论 -
JVM深入解析
Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是Java执...原创 2020-03-07 12:04:43 · 225 阅读 · 0 评论