摘要:在寫框架的時候出現(xiàn)了頭疼問題找不到方法這樣寫能找到方法,沒有問題但是換成下面的方式就出問題了。建議建議使用然后我們自己遍歷,不推薦使用
在寫rpc框架的時候出現(xiàn)了頭疼問題:
public Object invoke(Object bean)throws Exception { Method[] methods = clazz.getMethods(); for (Method method:methods) { if(method.getName().equals(method.getName())){ return method.invoke(bean, param); } } throw new Exception("找不到方法"); }
這樣寫能找到方法,沒有問題?。〉菗Q成下面的方式就出問題了。
public Object invoke(Object bean)throws Exception { return clazz.getMethod(method, param.getClass()).invoke(bean, param); }
跑出異常為:
java.lang.NoSuchMethodException:com.robin.interf.UserService.getUser(java.lang.Integer)
java使用的版本是:jdk1.8.0_101
Class.java代碼跟蹤:
是一個searchMethods的方法在查找,繼續(xù)走
代碼走到這里,res=null,導致NoSuchMethodException異常,算是java8 bug吧!
原因:searchMethods方法里,m.getName() == internedName這句導致的,正確的是m.getName().intern() == internedName,因為m.getName()是堆里取出值,而internedName是常量池里的,而m.getName().intern()會將常量池里存在的字符串直接取到,不存在的會放入到常量池里。
建議:建議使用class.getMethods(),然后我們自己遍歷,不推薦使用class.getMethod(methodName, paras)
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66123.html
摘要:服務本身是一個,開起的線程數(shù)為,再加上一些其他線程,總的線程數(shù)不會超過服務內(nèi)自己沒有顯示創(chuàng)建線程或者使用線程池。問題解決找到所在后,結局方案很簡單,只需將的通過單例的方式注入到服務中,即可解決堆外內(nèi)存泄漏的問題。 內(nèi)存泄漏Bug現(xiàn)場 一個做BI數(shù)據(jù)展示的服務在一個晚上重啟了5次,由于是通過k8s容器編排,服務掛了以后會自動重啟,所以服務還能繼續(xù)提供服務。 第一時間先上日志系統(tǒng)查看錯誤日...
閱讀 2857·2023-04-26 02:49
閱讀 3441·2021-11-25 09:43
閱讀 3370·2021-10-09 09:43
閱讀 2985·2021-09-28 09:44
閱讀 2446·2021-09-22 15:29
閱讀 4507·2021-09-14 18:02
閱讀 2773·2021-09-03 10:48
閱讀 3426·2019-08-30 12:47