
java类加载和gc
文章平均质量分 74
java类,类加载,运行时内存,gc相关集合
master-dragon
weixin:dwl_1270530306
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java arthas redefine实现热替换某个类
结果,程序一直保证运行,当arthas redifine后,程序输出新class的内容。简单的看下arthas redefine类的效果。原创 2025-06-29 16:10:35 · 283 阅读 · 0 评论 -
JVM预热
阿里每年的各种大促活动,对于Java技术来说,其中重要一个操作环节就是预热操作。原创 2025-02-22 23:49:28 · 1202 阅读 · 0 评论 -
【演练】Java CPU,内存等问题排查与定位解决
cpu 负载高排查演练1 启动java程序并观察cpu负载import java.util.*;import java.util.concurrent.TimeUnit;class Test { void testCpu(){ int num = 0; long start = System.currentTimeMillis() / 1000;...原创 2020-02-15 23:24:07 · 628 阅读 · 0 评论 -
Java gc完整认识和常见问题
算法的基本思路就是通过一系列的称为GC Roots的对象作为起始点,从这些节点向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是GC Roots到这个对象不可达)时,则证明此对象是不可用的。原创 2025-02-16 10:53:17 · 1148 阅读 · 0 评论 -
几种垃圾回收算法
1.引用计数算法引用计数(Reference Counting)算法是每个对象计算指向它的指针的数量,当有一个指针指向自己时计数值加1;当删除一个指向自己的指针时,计数值减1,如果计数值减为0,说明已经不存在指向该对象的指针了,原创 2016-12-18 16:44:17 · 6092 阅读 · 0 评论 -
通过类加载和初始化的一些题目理解Java类加载过程
上面例子使用不同构造函数。原创 2025-02-09 21:28:19 · 344 阅读 · 0 评论 -
Class加载流程和运行时区域
在Java程序中很多对象都是小对象且用过即丢,它们不存在线程共享也适合被快速GC,所以对于小对象通常JVM会优先分配在TLAB上,并且TLAB上的分配由于是线程私有,所以没有锁开销。也就是说,Java中每个线程都会有自己的缓冲区称作TLAB,在对象分配的时候不用锁住整个堆,而只需要在自己的缓冲区分配即可。编译器收集的顺序是由语句在源文件中出现的顺序所决定的,静态语句块中只能访问到定义在静态语句块之前的变量;静态变量,常量,类信息(构造方法,接口定义),运行时的常量池存在方法区中,但是实例变量存在堆内存中。原创 2025-02-07 22:42:54 · 751 阅读 · 0 评论 -
Java 双亲委派问题&解决实战(三)
本文主要对上两篇文章进行总结,同时结合过去工作说一些感想Java 双亲委派问题&解决实战(一)Java 双亲委派问题&解决实战(二)首先通过上两篇文章的讲解和代码实战,对JAVA类加载的双亲委派是有了进一步认识,比纸上谈兵更有体会。其次,其实工作中的确是经常遇到依赖问题,版本升级问题;比如业务依赖了rpc中间件,数据库中间件, 而这两个都依赖fastjson,但是是不同版本;还有比如经常有fastjson安全漏洞,要全员业务升级,比较糟糕的做法就是每个业务组,每个项目都人工一个原创 2021-03-13 20:30:15 · 335 阅读 · 0 评论 -
Java 双亲委派问题&解决实战(二)
接上一篇: Java 双亲委派问题&解决实战(一),讨论依赖中的类加载问题设想如下场景demo1 的1.0;2.0;3.0 三个版本分别北依赖;如果业务bundle-main要正常运行依赖结果,这显然要冲突项目工程如下:经过上一篇文章,显然只要我们自定义类加载器,每个模块类正确加载对应版本的即可,代码如下package com.dq.bundle.main;import java.io.File;import java.lang.reflect.InvocationTarge原创 2021-03-13 20:05:22 · 290 阅读 · 0 评论 -
Java 双亲委派问题&解决实战(一)
目录java.lang.NoClassDefFoundError 问题引入工程的3个模块介绍测试例子报错`java.lang.NoClassDefFoundError`附:测试代码 & 原因使用自定义类加载器解决使用arthas查看类加载信息java.lang.NoClassDefFoundError 问题引入工程的3个模块介绍源码见:https://github.com/doctording/bundlebundle-main 测试demo1 有一个Hello类demo2 有一个Us原创 2021-03-13 16:07:17 · 456 阅读 · 0 评论 -
Java类加载器不同导致SPI加载报错: Provider ... not a subtype
如下图整段代码如下,当注释掉myThread.setContextClassLoader(myClassLoader);后才正常运行package com.hotload;import java.util.ServiceLoader;class MyThread extends Thread{ @Override public void run() { try{ ServiceLoader<A> serviceLoader原创 2021-09-25 16:31:35 · 5335 阅读 · 1 评论 -
类加载器不同导致类型强制转换报错:java.lang.ClassCastException
直接看如下错误例子com.hotload.Test cannot be cast to com.hotload.Test,因为com.hotload.Test的类加载器是MyComOtherClassLoader,而非默认的 sun.misc.Launcher$AppClassLoader如下则正常原创 2021-09-25 15:24:26 · 2214 阅读 · 0 评论 -
java new对象的类加载器是谁?
关于java new 对象使用的流程我们都知道如下图所示但是究竟是谁(即那个类加载器)完成【加载】的呢?如下两个类:Testpackage com.hotload;/** * @Author mubi * @Date 2020/7/27 08:49 */public class Test { public Test() { } public String hello(String msg){ return "hello:" + msg;原创 2021-09-25 16:01:56 · 963 阅读 · 0 评论