非静态内部类导致内存泄漏主要原因:::App可能会因为大量的内存泄漏导致内存耗尽,引发Crash,如果内存耗尽,App会由于内存空间不足,出现频繁的GC,每一次GC都是一个耗时阻塞操作,会造成设备卡顿。 非静态内部类中创建了一个静态实例,导致该实例的生命周期和应用ClassLoader级别,又因为该 ...
分类:
其他好文 时间:
2019-11-16 10:35:11
阅读次数:
131
引言 本文主要介绍Java中,有关反射机制、类的加载过程、以及控制反转方面的内容。 Java 反射机制 Java创建对象的方式有哪些:new、反射、反序列化、克隆 class对象获取的方法有哪些:类名.class、getClass、forName、classLoader.loadClass(‘包类名 ...
分类:
编程语言 时间:
2019-11-11 15:52:36
阅读次数:
100
JVM是什么?类加载器是什么? JVM是虚拟机(Java Virtual Machine),JVM是运行字节码的。JVM有针对不同系统的特定实现(Windows、Linux、macOS),目的是使用相同的字节码,它们都会给出相同的结果。 类加载器(ClassLoader)是Java运行时环境(Jav ...
分类:
其他好文 时间:
2019-11-04 20:05:14
阅读次数:
91
简介:动态代理是指在运行时,动态生成代理类。即代理类的字节码将在运行时生成并载入当前的ClassLoader。与静态代理类相比,有诸多好处。不需要为真实主题写一个形式上完全一样的封装类,若接口过多,则会代理接口也很多,接口稍微改动,代理接口也要进行变更;其次,使用动态代理可以在运行时指定代理类的执行 ...
分类:
其他好文 时间:
2019-11-03 17:59:07
阅读次数:
81
一、前言 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。 其深层原理是使用了两个ClassLoader ...
分类:
编程语言 时间:
2019-10-26 16:53:46
阅读次数:
94
在了解双亲委派机制之前,你应当知道classloader(如果不了解,可以现在去恶补一下哈) 四种classloader 1. 虚拟机自带 引导类加载器(Bootstrap ClassLoader) 扩展类加载器(Extension ClassLoader) 系统类加载器(Application C ...
分类:
编程语言 时间:
2019-10-21 00:06:01
阅读次数:
109
方案一: 采用reflections 框架(此框架依赖com.google.guava) 1、reflections框架地址:https://github.com/ronmamo/reflections 2、项目依赖 3、实现代码 方案二: 采用ClassLoader扫描 1、实现代码 2、使用: ...
分类:
编程语言 时间:
2019-10-13 23:26:24
阅读次数:
272
JVM 一 JVM体系结构概述 1.1类装载器ClassLoader 负责加载class文件,class在文件开头有特定的文件标识,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则有Execution Engine决定. 1.2 三种类加载器 启动类加载器(Bootstr ...
分类:
其他好文 时间:
2019-10-10 22:44:16
阅读次数:
96
平日里开发项目中,修改了Java代码或者配置文件的时候,必须手动重启项目才能生效。所谓的热部署就是在你修改了后端代码后不需要手动重启,工具会帮你快速的自动重启是修改生效。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassL ...
分类:
编程语言 时间:
2019-10-06 11:39:50
阅读次数:
76
一、ClassLoader概念 ClassLoader是用来动态的加载class文件到虚拟机中,并转换成java.lang.class类的一个实例,每个这样的实例用来表示一个java类,我们可以根据Class的实例得到该类的信息,并通过实例的newInstance()方法创建出该类的一个对象,除此之 ...
分类:
其他好文 时间:
2019-10-01 18:07:07
阅读次数:
75