小编Aka*_*lya的帖子

使用jackson ObjectMapper时保留的堆大小更多

我使用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)

java garbage-collection heap-memory jackson

6
推荐指数
1
解决办法
3340
查看次数

多个@Transactional注释超过2种方法不起作用

我的交易有两种方法,如下所示

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.

请有人指导我这个.

spring jpa transactions

2
推荐指数
1
解决办法
1036
查看次数