You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
arthas/en/_sources/classloader.md.txt

123 lines
4.1 KiB
Plaintext

7 years ago
classloader
===========
5 years ago
[`classloader` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-classloader)
6 years ago
View hierarchy, urls and classes-loading info for the class-loaders.
7 years ago
5 years ago
`classloader` can search and print out the URLs for a specified resource from one particular classloader. It is quite handy when analyzing `ResourceNotFoundException`.
7 years ago
### Options
|Name|Specification|
|---:|:---|
6 years ago
|[l]|list all classloader instances|
6 years ago
|[t]|print classloader's hierarchy|
6 years ago
|[a]|list all the classes loaded by all the classloaders (use it with great caution since the output can be huge)|
6 years ago
|[c:]|print classloader's hashcode|
5 years ago
|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. |
6 years ago
|`[c: r:]`|using ClassLoader to search resource|
|`[c: load:]`|using ClassLoader to load class|
7 years ago
### Usage
6 years ago
#### View statistics categorized by class type
7 years ago
7 years ago
```bash
7 years ago
$ classloader
6 years ago
name numberOfInstances loadedCountTotal
com.taobao.arthas.agent.ArthasClassloader 1 2115
BootstrapClassLoader 1 1861
sun.reflect.DelegatingClassLoader 5 5
sun.misc.Launcher$AppClassLoader 1 4
sun.misc.Launcher$ExtClassLoader 1 1
Affect(row-cnt:5) cost in 3 ms.
7 years ago
```
6 years ago
#### View statistics categorized by loaded classes number
7 years ago
7 years ago
```bash
7 years ago
$ classloader -l
6 years ago
name loadedCount hash parent
BootstrapClassLoader 1861 null null
com.taobao.arthas.agent.ArthasClassloader@68b31f0a 2115 68b31f0a sun.misc.Launcher$ExtClassLoader@66350f69
sun.misc.Launcher$AppClassLoader@3d4eac69 4 3d4eac69 sun.misc.Launcher$ExtClassLoader@66350f69
sun.misc.Launcher$ExtClassLoader@66350f69 1 66350f69 null
Affect(row-cnt:4) cost in 2 ms.
7 years ago
```
6 years ago
#### View class-loaders hierarchy
7 years ago
6 years ago
```bash
7 years ago
$ classloader -t
+-BootstrapClassLoader
6 years ago
+-sun.misc.Launcher$ExtClassLoader@66350f69
+-com.taobao.arthas.agent.ArthasClassloader@68b31f0a
+-sun.misc.Launcher$AppClassLoader@3d4eac69
Affect(row-cnt:4) cost in 3 ms.
7 years ago
```
6 years ago
#### Show the URLs of the URLClassLoader
7 years ago
6 years ago
```bash
$ classloader -c 3d4eac69
file:/private/tmp/arthas-demo.jar
file:/Users/hengyunabc/.arthas/lib/3.0.5/arthas/arthas-agent.jar
Affect(row-cnt:9) cost in 3 ms.
7 years ago
```
5 years ago
Note that the hashcode changes, you need to check the current ClassLoader information first, and extract the hashcode corresponding to the ClassLoader.
For ClassLoader with only unique instance, it can be specified by class name, which is more convenient to use:
```bash
$ classloader --classLoaderClass sun.misc.Launcher$AppClassLoader
file:/private/tmp/arthas-demo.jar
file:/Users/hengyunabc/.arthas/lib/3.0.5/arthas/arthas-agent.jar
Affect(row-cnt:9) cost in 3 ms.
```
6 years ago
#### Use the classloader to load resource
7 years ago
6 years ago
```bash
$ classloader -c 3d4eac69 -r META-INF/MANIFEST.MF
jar:file:/System/Library/Java/Extensions/MRJToolkit.jar!/META-INF/MANIFEST.MF
jar:file:/private/tmp/arthas-demo.jar!/META-INF/MANIFEST.MF
jar:file:/Users/hengyunabc/.arthas/lib/3.0.5/arthas/arthas-agent.jar!/META-INF/MANIFEST.MF
7 years ago
```
6 years ago
Use the classloader to load `.class` resource
7 years ago
```shell
$ classloader -c 1b6d3586 -r java/lang/String.class
jar:file:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/rt.jar!/java/lang/String.class
```
6 years ago
#### Use the classloader to load class
```bash
$ classloader -c 3d4eac69 --load demo.MathGame
load class success.
class-info demo.MathGame
code-source /private/tmp/arthas-demo.jar
name demo.MathGame
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name MathGame
modifier public
annotation
interfaces
super-class +-java.lang.Object
class-loader +-sun.misc.Launcher$AppClassLoader@3d4eac69
+-sun.misc.Launcher$ExtClassLoader@66350f69
classLoaderHash 3d4eac69
```