Skip to content

Commit

Permalink
使用JVMTI为vmtool工具添加分析占用最大堆内存的类、对象及对象间引用关系的功能
Browse files Browse the repository at this point in the history
  • Loading branch information
yuankong11 committed Sep 26, 2021
1 parent dee70a8 commit 9f06884
Show file tree
Hide file tree
Showing 18 changed files with 704 additions and 21 deletions.
2 changes: 2 additions & 0 deletions arthas-vmtool/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
<directory>src/main/native/src</directory>
<fileNames>
<fileName>jni-library.cpp</fileName>
<fileName>HeapAnalyzer.cpp</fileName>
</fileNames>
</source>
</sources>
Expand Down Expand Up @@ -162,6 +163,7 @@
<directory>src/main/native/src</directory>
<fileNames>
<fileName>jni-library.cpp</fileName>
<fileName>HeapAnalyzer.cpp</fileName>
</fileNames>
</source>
</sources>
Expand Down
13 changes: 13 additions & 0 deletions arthas-vmtool/src/main/java/arthas/VmTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ public static synchronized VmTool getInstance(String libPath) {
*/
private static synchronized native Class<?>[] getAllLoadedClasses0(Class<?> klass);

private static synchronized native String heapAnalyze0(int classNum, int objectNum);

private static synchronized native String referenceAnalyze0(Class<?> klass, int objectNum, int backtraceNum);

@Override
public void forceGc() {
forceGc0();
Expand Down Expand Up @@ -103,4 +107,13 @@ public Class<?>[] getAllLoadedClasses() {
return getAllLoadedClasses0(Class.class);
}

@Override
public String heapAnalyze(int classNum, int objectNum) {
return heapAnalyze0(classNum, objectNum);
}

@Override
public String referenceAnalyze(Class<?> klass, int objectNum, int backtraceNum) {
return referenceAnalyze0(klass, objectNum, backtraceNum);
}
}
4 changes: 4 additions & 0 deletions arthas-vmtool/src/main/java/arthas/VmToolMXBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,8 @@ public interface VmToolMXBean {
* 获取所有已加载的类
*/
public Class<?>[] getAllLoadedClasses();

public String heapAnalyze(int classNum, int objectNum);

public String referenceAnalyze(Class<?> klass, int objectNum, int backtraceNum);
}
2 changes: 1 addition & 1 deletion arthas-vmtool/src/main/native/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ project(arthas-native)

set(CMAKE_CXX_STANDARD 14)

add_library(jni-lib SHARED src/jni-library.cpp)
add_library(jni-lib SHARED src/jni-library.cpp src/HeapAnalyzer.cpp src/HeapAnalyzer.h)

#使用环境变量来include,把不同系统的兼容问题交给jdk解决
include_directories("include")
Expand Down
Loading

0 comments on commit 9f06884

Please sign in to comment.