利用AOP實現在執行目標方法前獲取參數佔用內存大小

利用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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章