摘要:在寫框架的時候出現了頭疼問題找不到方法這樣寫能找到方法,沒有問題但是換成下面的方式就出問題了。建議建議使用然后我們自己遍歷,不推薦使用
在寫rpc框架的時候出現了頭疼問題:
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("找不到方法"); }
這樣寫能找到方法,沒有問題!!但是換成下面的方式就出問題了。
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的方法在查找,繼續走
代碼走到這里,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)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66123.html
摘要:服務本身是一個,開起的線程數為,再加上一些其他線程,總的線程數不會超過服務內自己沒有顯示創建線程或者使用線程池。問題解決找到所在后,結局方案很簡單,只需將的通過單例的方式注入到服務中,即可解決堆外內存泄漏的問題。 內存泄漏Bug現場 一個做BI數據展示的服務在一個晚上重啟了5次,由于是通過k8s容器編排,服務掛了以后會自動重啟,所以服務還能繼續提供服務。 第一時間先上日志系統查看錯誤日...
閱讀 2882·2023-04-26 02:49
閱讀 3455·2021-11-25 09:43
閱讀 3430·2021-10-09 09:43
閱讀 3008·2021-09-28 09:44
閱讀 2457·2021-09-22 15:29
閱讀 4529·2021-09-14 18:02
閱讀 2789·2021-09-03 10:48
閱讀 3434·2019-08-30 12:47