JVM
2021-02-28
29
0
在阅读『深入理解Java虚拟机(第3版)』时看到里面的一道代码题目,书中给出了题目的解答。自己对于这个题目拓展的想了几个变式,结果有所差异,为了寻找产生差异的原因又深入了解了一番。
在『深入理解Java虚拟机(第3版)』的7.2章节 "类加载的时机",其代码清单7-1有这么一段代码:
public class SuperClass {
static {
System.out.println("SuperClass init!");
}
public static int VALUE = 1;
}
public class SubClass extends SuperClass {
static {
System.out.println("SubClass init!");
}
}
public class Main {
public static void main(String[] args) {
System.out.println(SubClass.VALUE);
}
}
Spring Boot
2020-10-25
161
3
前情提要:
在Service调用其他Service的private方法, @Transactional会生效吗(上)中证明了动态代理不会代理private方法的, 并通过阅读源码证实了.
但是我们可以自己实现一个动态代理功能替代
Spring Boot
中原有的, 达到动态代理private方法的目的.主要流程为:
- 重新实现一个
ProxyGenerator.generateClassFile()
方法, 输出带有private方法的代理类字节码数据- 把字节码数据加载到JVM中, 生成Class
- 替代
Spring Boot
中默认的动态代理功能, 换成我们自己的动态代理.
Spring Boot
2020-10-25
134
0
省流大师:
一个Service调用其他Service的private方法, @Transactional会生效吗
正常流程不能生效
经过一番操作, 达到理论上可以
本文基于Spring Boot 2.3.3.RELEASE、JDK1.8 版本, 使用Lombok插件
2020-08-18
145
1
PowerShell执行
# 权限允许
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
# 执行安装脚本
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.sco
异常分析
2020-01-21
216
0
DruidDataSource
袭击一个平凡的工作日,我像往常一样完成产品提出的需求的业务代码,突然收到了监控平台发出的告警信息。本以为又是一些业务上的bug导致的报错,一看报错发现日志写着java.lang.OutOfMemoryError: Java heap space
。
接着我远程到那台服务器上,但是卡的不行。于是我就用top
命令查了一下cpu信息,占用都快要到99%了。再看看GC的日志发现程序一直在Full GC,怪不得cpu占用这么高。
这里就推测是有内存泄漏的问题导致GC无法回收内存导致OOM
。为了先不影响业务,就先让运维把这个服务重启一下,果然重启后服务就正常了。