利用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);
}
}