Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

为什么会有类卸载一说 在一些场景中,比如java agent技术,我们attach到目标jvm的agent中的类被加载并且使用完后,它的使命就完成了,留着占用jvm内存,这时候就需要卸载掉。 如何卸载 在之前的文章中有分享过类加载,有类加载就有类卸载,当这个类的Class对象不再被引用时,那它的生命周期就结束了。我们需要理解这么几个概念: 类加载器 Class对象 类的实例。 我们知道,...
Java

前言 在之前的文章里我们介绍了ASM字节码框架,使用它可以动态的修改class文件。但是仔细一想,你会发现仅仅ASM并不能真正用于生产,为什么?假如你已经有一个在运行的系统了,现在想要做一些字节码修改的动作,难道我们要去修改源代码吗?麻烦不说,而且污染了本来的系统。 所以我们就考虑,有没有什么方法,可以实现动态的无污染的织入,这就要引入今天的主角,Instrument了。 正文 Instru...
Java

写这篇文章是因为在开水团实习的时候的一个项目用到了这个技术,在这里重新做下总结和梳理。 什么是ASM ASM是一个字节码操作框架,使用它可以动态地修改class文件,或者让类被加载到虚拟机之前修改一些行为。 ASM有什么用 一言以蔽之,AOP. 说到AOP,可能会想到Spring的JDK动态代理Proxy或者CGLIB. 这里JDK动态代理底层使用反射实现,众所周知反射的性能比较差。...
Java

此文为我在备战秋招过程中对Java基础知识的启发式总结。 Java集合类,有Set, List, Queue. List底下有Vector, ArrayList, LinkedList. Vecotr底下还有个Stack. 讲一讲区别? 要说区别的话,Vector和ArrayList底层都是动态数组,不同的是Vector是线程安全的,因为它的方法有被**synchronized**关...
Java

最近在看Spring中的AOP, 其实现主要是靠动态代理,所以打算先了解一下动态代理。 要说动态代理,需要先知道什么是代理,既然是动态代理,那么有没有静态代理,区别又在哪里。 何为代理,最直观的,我们fq时会用到小飞机或者其他的正向代理,说白了就是让代理代替我们去做某件事,在设计模式中专门有一个代理模式,我们可以先来看下代理模式的类图。 其中ProxyImage就是代理对象,代理了Re...
Java

最近阿里各部门已经陆续开始春招,自己也写完了项目最后的一部分,简历也刚刚完成了1.0版本,但是仍旧按捺不住躁动的内心。对于简历投递与面试,我是既期望又紧张,害怕它来又怕他不来。与其临渊羡鱼,不如退而结网,有躁动的功夫,不如温习一下知识点,正好最近一直在写项目, 知识点也快忘的差不多了。接下来打算结合自己的简历,从面试官的角度,对自己进行提问。 Java 集合类是否了解? Set L...
Java

最近在重新看JVM的内容,这篇文章重新梳理一下垃圾回收中的相关内容。 Java中的垃圾回收(Garbage Collection, GC)指的是回收堆和方法区中不再使用被使用到的对象,即垃圾。 GC中需要考虑的三个主要问题: 什么是垃圾:即哪些对象可以被定义为垃圾 何时回收 如何回收 本文将针对上述三个问题一一解答。 什么是垃圾? 这里就涉及到两种判断对象是否存活的算法: 引用计数法...
Java

最近发现JUC包里除了AtomicLong外还有LongAdder,所以打算研究一下它俩的异同。 AtomicLong AtomicLong是JUC包中的原子类,通过CAS来实现long类型的加减。 那么既然都有AtomicLong类了,为什么还要有一个LongAdder类?因为从名字来看,LongAdder也是用来操作long类型的。 LongAdder的设计思想 先翻译一段官方文档里...
Java

CountDownLatch 多线程的使用中往往有这样的场景:某个线程需要等到其他线程执行完毕后才能继续执行,即线程的“等待其他线程”的功能(注意这里说的不是wait())。这时候就可以用CountDownLatch类来实现,当然了,Thread.join()方法也具有这个功能,只不过相比之下,CountDownLatch功能更加丰富。 通过一个例子来看下: 1234567891011121...
Java

等待/唤醒机制是多线程之间进行通信(同步)的一种方式,这里对它在Java中的使用做一个总结。 Object的wait()和notify() 这个算是比较原始的一种等待/唤醒机制,这两个方法都是Object类中定义的方法,也就是说每个对象都拥有这两个方法。 它们一般都是和synchronized关键字配合使用的。 Condition接口 Condition接口是为了对Lock的一个等待/通知机...
Java