Skip to content

Commit e2f28fc

Browse files
authored
Merge pull request #1 from vipshop/master
更新
2 parents 5f47972 + ca34d6c commit e2f28fc

File tree

15 files changed

+78
-57
lines changed

15 files changed

+78
-57
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
| [vjmxcli](/vjmxcli) | JMX 查看工具 | [Chinese](/vjmxcli/README.md)|
3434

3535
视频:[《VJTools如何利用佛性技术玩转JVM》](http://kai.vkaijiang.com/product/course?courseID=120897)
36+
3637
其他直接使用的工具,见[常用工具](docs/other/othertools.md)
3738

3839

vjkit/src/test/java/com/vip/vjtools/vjkit/collection/CollectionUtilTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ public void test() {
4747
assertThat(CollectionUtil.getLast(set2)).isEqualTo("a");
4848

4949
assertThat(CollectionUtil.getFirst(list1)).isNull();
50-
assertThat(CollectionUtil.getFirst(null)).isNull();
50+
assertThat((List<String>)CollectionUtil.getFirst(null)).isNull();
5151
assertThat(CollectionUtil.getLast(list1)).isNull();
52-
assertThat(CollectionUtil.getLast(null)).isNull();
52+
assertThat((List<String>)CollectionUtil.getLast(null)).isNull();
5353
}
5454

5555
@Test

vjkit/src/test/java/com/vip/vjtools/vjkit/collection/ListUtilTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void general() {
9393
assertThat(ListUtil.getLast(list3)).isEqualTo("a");
9494

9595
assertThat(ListUtil.getFirst(list1)).isNull();
96-
assertThat(ListUtil.getFirst(null)).isNull();
96+
assertThat((List<String>)ListUtil.getFirst(null)).isNull();
9797
}
9898

9999
@Test

vjkit/src/test/java/com/vip/vjtools/vjkit/concurrent/ThreadLocalContextTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void run() {
2727
}
2828
ThreadLocalContext.put("myname", Thread.currentThread().getName());
2929
ThreadUtil.sleep(RandomUtil.nextLong(100, 300));
30-
System.out.println(ThreadLocalContext.get("myname"));
30+
System.out.println((String)ThreadLocalContext.get("myname"));
3131
ThreadLocalContext.reset();
3232
System.out.println(
3333
"shoud null for " + Thread.currentThread().getName() + ":" + ThreadLocalContext.get("myname"));

vjkit/src/test/java/com/vip/vjtools/vjkit/reflect/ReflectionUtilTest.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ public class ReflectionUtilTest {
1616
public void getAndSetFieldValue() {
1717
TestBean bean = new TestBean();
1818
// 无需getter函数, 直接读取privateField
19-
assertThat(ReflectionUtil.getFieldValue(bean, "privateField")).isEqualTo(1);
19+
assertThat((int)ReflectionUtil.getFieldValue(bean, "privateField")).isEqualTo(1);
2020

2121
// 先尝试getter函数, 然后直接读取privateField
22-
assertThat(ReflectionUtil.getProperty(bean, "privateField")).isEqualTo(1);
22+
assertThat((int)ReflectionUtil.getProperty(bean, "privateField")).isEqualTo(1);
2323

2424
// 绕过将publicField+1的getter函数,直接读取publicField的原始值
25-
assertThat(ReflectionUtil.getFieldValue(bean, "publicField")).isEqualTo(1);
25+
assertThat((int)ReflectionUtil.getFieldValue(bean, "publicField")).isEqualTo(1);
2626
// 先尝试getter函数, 成功则补不直接读取publicField
27-
assertThat(ReflectionUtil.getProperty(bean, "publicField")).isEqualTo(2);
27+
assertThat((int)ReflectionUtil.getProperty(bean, "publicField")).isEqualTo(2);
2828

2929
bean = new TestBean();
3030
// 无需setter函数, 直接设置privateField
@@ -57,7 +57,7 @@ public void getAndSetFieldValue() {
5757
@Test
5858
public void invokeGetterAndSetter() {
5959
TestBean bean = new TestBean();
60-
assertThat(ReflectionUtil.invokeGetter(bean, "publicField")).isEqualTo(bean.inspectPublicField() + 1);
60+
assertThat((int)ReflectionUtil.invokeGetter(bean, "publicField")).isEqualTo(bean.inspectPublicField() + 1);
6161

6262
bean = new TestBean();
6363
// 通过setter的函数将+1
@@ -69,32 +69,32 @@ public void invokeGetterAndSetter() {
6969
public void invokeMethod() {
7070
TestBean bean = new TestBean();
7171
// 使用函数名+参数类型的匹配, 支持传参数
72-
assertThat(ReflectionUtil.invokeMethod(bean, "privateMethod", new Object[] { "calvin" }))
72+
assertThat((String)ReflectionUtil.invokeMethod(bean, "privateMethod", new Object[] { "calvin" }))
7373
.isEqualTo("hello calvin");
7474

7575
// 使用函数名+参数类型的匹配
76-
assertThat(ReflectionUtil.invokeMethod(bean, "privateMethod", new Object[] { "calvin" },
76+
assertThat((String)ReflectionUtil.invokeMethod(bean, "privateMethod", new Object[] { "calvin" },
7777
new Class[] { String.class })).isEqualTo("hello calvin");
7878

7979
// 仅匹配函数名
80-
assertThat(ReflectionUtil.invokeMethodByName(bean, "privateMethod", new Object[] { "calvin" }))
80+
assertThat((String)ReflectionUtil.invokeMethodByName(bean, "privateMethod", new Object[] { "calvin" }))
8181
.isEqualTo("hello calvin");
8282

8383
// 各种类型
84-
assertThat(ReflectionUtil.invokeMethod(bean, "intType", new Object[] { 1 }, new Class[] { int.class }))
84+
assertThat((int)ReflectionUtil.invokeMethod(bean, "intType", new Object[] { 1 }, new Class[] { int.class }))
8585
.isEqualTo(1);
8686

87-
assertThat(ReflectionUtil.invokeMethod(bean, "integerType", new Object[] { 1 }, new Class[] { Integer.class }))
87+
assertThat((int)ReflectionUtil.invokeMethod(bean, "integerType", new Object[] { 1 }, new Class[] { Integer.class }))
8888
.isEqualTo(1);
8989

90-
assertThat(ReflectionUtil.invokeMethod(bean, "listType", new Object[] { ListUtil.newArrayList("1", "2") },
90+
assertThat((int)ReflectionUtil.invokeMethod(bean, "listType", new Object[] { ListUtil.newArrayList("1", "2") },
9191
new Class[] { List.class })).isEqualTo(2);
9292

93-
assertThat(ReflectionUtil.invokeMethod(bean, "intType", 1)).isEqualTo(1);
93+
assertThat((int)ReflectionUtil.invokeMethod(bean, "intType", 1)).isEqualTo(1);
9494

95-
assertThat(ReflectionUtil.invokeMethod(bean, "integerType", 1)).isEqualTo(1);
95+
assertThat((int)ReflectionUtil.invokeMethod(bean, "integerType", 1)).isEqualTo(1);
9696

97-
assertThat(ReflectionUtil.invokeMethod(bean, "listType", ListUtil.newArrayList("1", "2"))).isEqualTo(2);
97+
assertThat((int)ReflectionUtil.invokeMethod(bean, "listType", ListUtil.newArrayList("1", "2"))).isEqualTo(2);
9898

9999
// 函数名错
100100
try {

vjmap/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ vjmap的原始思路来源于R大的[TBJMap](https://github.com/alibaba/TBJMap)
1717

1818
注意:vjmap在执行过程中,会完全停止应用一段时间,必须摘流量执行!!!!
1919

20-
必须设定JAVA_HOME环境变量,必须与目标JVM使用相同的JDK版本运行,必须与目标JVM使用相同用户运行,或root用户执行 (sudo -E vjmap.sh ...,)
20+
必须与目标JVM使用相同的JDK版本运行,必须与目标JVM使用相同用户运行,或root用户执行 (sudo -E vjmap.sh ...,)
2121

2222
vjmap的运行需要一段时间,如果中途需要停止执行,请使用kill vjmap的进程号,让vjmap从目标进程退出。如果错用了kill -9 ,目标java进程会保持在阻塞状态不再工作,此时必须执行两次 kill -18 目标进程PID来重新唤醒目标java进程。
2323

vjmap/src/main/assembly/vjmap.bat

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ if "%JAVA_HOME%" == "" goto noJavaHome
77
echo WARNING!! STW(Stop-The-World) will be performed on your Java process, if this is NOT wanted, type 'Ctrl+C' to exit.
88

99

10-
set BASEDIR=%~dp0
11-
set SA_JDI_PATH=%JAVA_HOME%\lib\sa-jdi.jar
12-
java -XX:AutoBoxCacheMax=20000 -classpath "%BASEDIR%\vjmap.jar;%SA_JDI_PATH%" com.vip.vjtools.vjmap.VJMap %*
10+
set DIR=%~dp0
11+
java -XX:AutoBoxCacheMax=20000 -classpath "%DIR%\vjmap.jar;%JAVA_HOME%\lib\sa-jdi.jar" com.vip.vjtools.vjmap.VJMap %*
1312
goto end
1413

1514
:noJavaHome

vjmap/src/main/assembly/vjmap.sh

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,20 @@
11
#!/bin/sh
22

3-
if [ -z "$JAVA_HOME" ]; then
4-
echo "JAVA_HOME env is not set, try to find it out"
3+
if [ -z "$JAVA_HOME" ] ; then
4+
echo "JAVA_HOME env doesn't exist, try to find the location of java"
5+
JAVA_HOME=`readlink -f \`which java 2>/dev/null\` 2>/dev/null | \
6+
sed 's/\jre\/bin\/java//' | sed 's/\/bin\/java//'`
7+
fi
8+
9+
SAJDI_PATH=$JAVA_HOME/lib/sa-jdi.jar
510

6-
JAVA_PATH=`which java 2>/dev/null`
7-
if [ "x$JAVA_PATH" != "x" ]; then
8-
JAVA_PATH=`dirname $JAVA_PATH 2>/dev/null`
9-
JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null`
10-
fi
11+
if [ ! -f "$SAJDI_PATH" ] ; then
12+
echo "JAVA_HOME is $JAVA_HOME, $SAJDI_PATH doesn't exist !" >&2
13+
exit 1
1114
fi
1215

13-
SA_JDI_PATH=$JAVA_HOME/lib/sa-jdi.jar
16+
DIR=$( cd $(dirname $0) ; pwd -P )
1417

1518
echo -e "\033[31mWARNING!! STW(Stop-The-World) will be performed on your Java process, if this is NOT wanted, type 'Ctrl+C' to exit. \033[0m"
1619

17-
PRGDIR=`dirname "$0"`
18-
BASEDIR=`cd "$PRGDIR/" >/dev/null; pwd`
19-
20-
if [ -f ${SA_JDI_PATH} ]; then
21-
java -XX:AutoBoxCacheMax=20000 -classpath $BASEDIR/vjmap.jar:$SA_JDI_PATH com.vip.vjtools.vjmap.VJMap $*
22-
else
23-
echo "JAVA_HOME/lib/sa-jdi.jar is not exist, please set your JAVA_HOME env";
24-
fi
20+
java -XX:AutoBoxCacheMax=20000 -classpath $DIR/vjmap.jar:$SAJDI_PATH com.vip.vjtools.vjmap.VJMap $*

vjmxcli/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
[Maven Central 下载](http://repo1.maven.org/maven2/com/vip/vjtools/vjmxcli/1.0.1/vjmxcli-1.0.1.zip)
1313

1414

15-
必须设定JAVA_HOME环境变量,必须与目标JVM使用相同的JDK版本运行。
15+
必须与目标JVM使用相同的JDK版本运行。
1616

1717
# 2. 获取MBean属性值
1818

vjmxcli/src/main/assembly/vjmxcli.bat

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
@echo off
2+
3+
4+
rem check java
5+
if "%JAVA_HOME%" == "" goto noJavaHome
6+
7+
set DIR=%~dp0
8+
"%JAVA_HOME%\bin\java" %JAVA_OPTS% -cp "%DIR%/vjmxcli.jar;%JAVA_HOME%/lib/tools.jar" com.vip.vjtools.jmx.Client %*
9+
goto end
10+
11+
:noJavaHome
12+
echo Please set JAVA_HOME before running this script
13+
goto end
14+
:end
15+
16+
pause

0 commit comments

Comments
 (0)