利用AOP切面编程实现:打印目标方法的参数所占用内存大小。
Maven配置
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.8</version>
</dependency>
Java代码
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.openjdk.jol.info.GraphLayout;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
* 在目标方法执行前,打印目标方法的参数所占用内存大小
*/
@Aspect
@Slf4j
@Component
public class GraphLayoutPrinter implements Serializable {
private static final long serialVersionUID = -8557926864119671723L;
/**
* com.xxx.batching 包及所有子包下任何类的任何方法
*/
@Pointcut("execution(* com.xxx.batching..*.*(..))")
public void pointCut(){}
@Before("pointCut()")
public void useMemory(JoinPoint joinPoint){
Object arg = joinPoint.getArgs()[0];
long totalSize = GraphLayout.parseInstance(arg).totalSize();
log.info("###The target method:[{}] parameter used memory is:[{}]KB",joinPoint.getSignature(),totalSize / 1024);
}
}