java报错sun.misc.unsafe.park(native method)
这个问题基本上是spring在启动的时候,某个东西重复被初始化(请仔细检查自己有没有重名的接口,我好几次都是接口重名导致的),导致内存溢出或者其它。
我们在编程的过程中,一定要细心,避免类似的错误发生。
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" }
所以猜想内存泄漏有可能就是出现在对象的序列化过程中。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持3w代码。
发表评论