我使用Jackson映射器将我的java对象转换为String,但这些对象不会被堆中的GC删除.
我的代码
List<Object[]> reportList; // This contains my objects
ObjectMapper map = new ObjectMapper(); // org.codehaus.jackson.map.ObjectMapper
return map.writeValueAsString(reportList);
Run Code Online (Sandbox Code Playgroud)
这会将String返回到我的视图层,但是通过保留在堆中的对象映射器解析对象.我已经采取了堆转储.
Class Name | Objects | Shallow Heap | Retained Heap
------------------------------------------------------------------
char[] | 5,03,267 | 5,48,74,336 | >= 54,874,336
byte[] | 18,067 | 3,09,01,016 | >= 30,901,016
java.lang.reflect.Method| 2,60,262 | 2,08,20,960 | >= 32,789,040
java.util.HashMap$Entry | 4,31,423 | 1,38,05,536 | >= 92,963,752
java.lang.String | 4,97,172 | 1,19,32,128 | >= 60,889,416
------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
看到char
Class Name | Shallow Heap | Retained Heap
----------------------------------------------------------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 我的交易有两种方法,如下所示
Class MyTransaction(){
@Transactional
public void initialTranx(){
String userId = 500;
// do some user specific activity
updateUserBalance(500);
// check user balance
}
@Transactional
private void updateUserBalance(int userId){
// codes for updating balance to 400
}
}
Run Code Online (Sandbox Code Playgroud)
现在调用initialTranx()方法,此方法在内部调用私有方法updateUserBalance(userid),但在执行updateUserBalance方法后,balance不会更新.只有在完成提交的公共方法(父方法)事务之后.
在完成私有方法本身之后,我需要提交我的第二个方法的事务.
我正在使用mysql for DB和spring数据JPA.
请有人指导我这个.