我是靠谱客的博主 眼睛大故事,最近开发中收集的这篇文章主要介绍【Java报错】记录一次 sun.misc.Unsafe.park(Native Method) Conflicting setter definitions for property 导致的内存泄露,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 报错信息

2021-10-29 08:44:56  WARN [,,,] [main] o.a.c.loader.WebappClassLoaderBase - 
The web application [ROOT] appears to have started a thread named [spring.cloud.inetutils] 
but has failed to stop it. This is very likely to create a memory leak. 
Stack trace of thread:
 sun.misc.Unsafe.park(Native Method)
2021-10-29 08:45:00 ERROR [,,,] [main] o.s.boot.SpringApplication - 
Application run failed
java.lang.IllegalArgumentException: Conflicting setter definitions for property "cur_page": 
com.example.demo.xxxClass#setSortTag(1 params) vs 
com.example.demo.xxxClass#setCurPage(1 params)

2. 错误代码

错误代码在第 2️⃣ 行:

@JsonProperty() 的 value 值跟下边的 curPage 的相同,就导致了 setter 定义冲突。

    @ApiModelProperty(value = "排序标签")
    @JsonProperty(value = "cur_page")
    private Integer sortTag;

    @ApiModelProperty(value = "当前页")
    @JsonProperty(value = "cur_page")
    private Integer curPage;

3. 原因分析

遇到内存泄漏的次数不多,值得分析一下,我们看一下编译后的代码:

    @JsonProperty("cur_page")
    public Demo setSortTag(final Integer sortTag) {
        this.sortTag = sortTag;
        return this;
    }

    @JsonProperty("cur_page")
    public Demo setCurPage(final Integer curPage) {
        this.curPage = curPage;
        return this;
    }

在JSON反序列化过程中,JSON需要和定义的实体类的属性对应,当属性名称不一致的时候我们会使用@JsonProperty("")来映射属性,编译后的代码除了@JsonProperty("curPage") 相同看不出其他的异常,实际上 @JsonProperty("") 在序列化时也起到作用了:

// 序列化前(不同的KEY)
{ "sort_tag" : "1",  "cur_page" : "2" }
// 理论上序列化后(具有相同的KEY)
{ "curPage" : null, "curPage" : "2" }

所以猜想内存泄漏有可能就是出现在对象的序列化过程中。

最后

以上就是眼睛大故事为你收集整理的【Java报错】记录一次 sun.misc.Unsafe.park(Native Method) Conflicting setter definitions for property 导致的内存泄露的全部内容,希望文章能够帮你解决【Java报错】记录一次 sun.misc.Unsafe.park(Native Method) Conflicting setter definitions for property 导致的内存泄露所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(28)

评论列表共有 0 条评论

立即
投稿
返回
顶部