jvm
文章平均质量分 74
xixingzhe2
代码开发爱好者
展开
-
jvm内存模型
JVM在执行Java程序时,会把它管理的内存划分为若干个的区域,每个区域都有自己的用途和创建销毁时间。如下图所示,可以分为两大部分,线程私有区和共享区。原创 2023-12-22 15:00:17 · 998 阅读 · 1 评论 -
双亲委派机制
当一个类加载器收到了类加载的请求的时候,他不会直接去加载指定的类,而是把这个请求委托给自己的父加载器去加载。只有父加载器无法加载这个类的时候,才会由当前这个加载器来负责类的加载。 Java中提供如下四种类型的加载器,每一种加载器都有指定的加载对象,具体如下 这四种类加载器存在如下关系,当进行类加载的时候,虽然用户自定义类不会由bootstrap classloader或是extension classloader加载(由类加载器的加载范围决定),但是代码实现还是会一直委托到boo原创 2022-06-28 17:45:22 · 631 阅读 · 0 评论 -
jdk命令使用场景
1、CPU 100%分析1.1 top查看进程pid3709进程占用cpu最高。1.2 使用jdk命令jstack获取此时的线程快照当前目录生成快照>jstack -l 3709 > ./jstack_result.txt1.3 top -Hp pid 查看子线程pid,可以看到CPU占用过高的线程[root@iZbp158rdu61wkh469o19kZ ~]# top -Hp 3709top - 00:08:12 up 1:41, 3 users原创 2022-05-01 18:33:18 · 1370 阅读 · 0 评论 -
Arthas Tunnel使用
1、下载部署arthas tunnel serverhttps://github.com/alibaba/arthas/releases 从Maven仓库下载:Maven Central Repository Search 从Github Releases页下载:https://github.com/alibaba/arthas/releases Arthas tunnel server是一个spring boot fat jar应用,直接java -jar启动:java -.原创 2022-04-19 15:01:07 · 2728 阅读 · 1 评论 -
jdb 调试
1、代码/** * @ClassName Num * @Description: * @Author ybwei * @Date 2020/10/30 * @Version V1.0 **/public class Num { public static int add(int a,int b){ return a+b; } public static void main(String[] args) { int a=3;原创 2020-10-30 14:40:07 · 1270 阅读 · 0 评论 -
arthas使用
1、CPU过高1.1 代码package com.spring.pro;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @ClassName FullCpu * @Description:CPU打满 * @Author ybwei * @Date 2020/10/13 * @Vers原创 2022-03-22 15:32:26 · 1037 阅读 · 0 评论 -
jvm 内存泄漏和内存溢出
1、下载mat下载地址:https://www.eclipse.org/mat/downloads.php2、内存泄漏demoimport java.util.ArrayList;import java.util.List;/** * @Title: DumpTest.java * @ProjectName docker-test * @Description...原创 2019-02-11 19:56:58 · 1819 阅读 · 1 评论 -
jvisualvm安装gc
jdk1.8版本1、修改更新地址jvisualvm已迁移到github中,不同版本更新地址:https://visualvm.github.io/pluginscenters.html2、安装在可用插件下选择gc,安装即可。下图为安装后结果 ...原创 2019-02-11 19:13:00 · 401 阅读 · 0 评论 -
线上cpu排查
1、查找部署项目的pid>ps -ef|grep docker-test #查询docker-test为项目名称root 3654 3401 98 14:53 pts/2 01:52:03 java -jar docker-test-2.0.1.RELEASE.jarroot 10134 2960 0 16:46 pts/1 00:00:00 g...原创 2019-02-11 17:21:14 · 228 阅读 · 0 评论 -
JDK、JRE、JVM三者间的关系
JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核...转载 2018-11-13 18:51:18 · 115 阅读 · 0 评论 -
JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
jvm区域总体分两类,heap区和非heap区。heap区又分:Eden Space(伊甸园)、Survivor Space(幸存者区)、Tenured Gen(老年代-养老区)。 非heap区又分:Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)。HotSpot虚拟机GC算法采用分代收...原创 2018-11-13 18:50:29 · 1699 阅读 · 0 评论 -
jvm 年轻代、年老代、永久代
关键字约定 Young generation –>新生代 Tenured / Old Generation –>老年代 Perm Area –>永久代 年轻代: 所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区。一个Eden区,两个 Survivor区(一般而言)。大部分对象在Eden区中生成。当...原创 2018-11-13 18:49:47 · 3798 阅读 · 0 评论 -
jvisualvm 无法下载插件解决方案
jvisualvm默认的下载地址已经无法更新插件了,需要进行修改。修改的具体地址可以在下面的地址中找到https://visualvm.github.io/pluginscenters.html 如我的jdk版本为1.8.0_121,修改为下面的地址即可。...原创 2018-11-13 18:49:11 · 2096 阅读 · 2 评论 -
Java中栈、堆和常量池
Java内存分配主要包括以下几个区域:寄存器最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.。栈存放基本类型的变量数据和对象的引用(就是一个名字),对象本身不存放在栈中,而是存放在堆或者常量池中。栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。栈区内存由编译器自动分配释放,具体方法...原创 2018-11-13 18:48:38 · 446 阅读 · 1 评论 -
关闭jvm的方式
1、System.exit(status)不管status为何值都会退出程序。 System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序。 2、System.exit(0)和dispose() System.exit(0)是将你的整个虚拟机里的内容都停掉了 ,而dispose()只是关闭这个窗口,但是并没有停止整个applicat...原创 2018-11-13 18:48:07 · 967 阅读 · 0 评论 -
GC 的三种基本实现方式
参考资料《代码的未来》(作者: [日] 松本行弘)。由于并非本人原著(我只是个“搬运工“),SO 未经本人允许请尽情转载。另外个人像说明一下这里所说的GC指泛指垃圾回收机制,而单指Java或其他某种特定语言中的GC——可能具体语言中实现的垃圾回收实现机制会有所不同。下面是具体内容:将内存管理,尤其是内存空间的释放实现自动化,这就是GC(Garbage Collection)。 G...转载 2018-11-13 18:47:29 · 688 阅读 · 0 评论