当Java程序中堆内存使用率一直很高,且不下降时,如何定位是那一段程序出现了问题?
1 Demo程序
程序的主要思路就是,每发送一次请求,就会往ConcurrentHashMap
中put一个value长度为1k的KV对。这样随着请求的不断增加,势必会造成程序中的内存资源被耗尽,具体表现就是Java程序的老年代使用率超过90%,程序出现卡死情况。
主要代码如下:
//controller
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private TestService service;
@RequestMapping("/test")
public String test() {
String result = service.test();
return result;
}
}
//service
@Service
public class TestService {
private ConcurrentHashMap<Integer, byte[]> map = new ConcurrentHashMap<>();
public String test() {
this.put();
return