我已经为Tomcat8服务器创建了一个WebApp。这是一个基于网络的小游戏。
自从我从flatfiles切换到MySQL之后,javax出现了很多问题。json生成器。
这里是我的代码部分:
public void saveUserResearch(){
MySQLTable t = SpaceWar.instance().getUserResearchTable();
JsonObjectBuilder mainBuilder = Json.createObjectBuilder();
JsonObjectBuilder subBuilder = Json.createObjectBuilder();
for(UserResearch r : getResearchList()){
int index = r.getIndex();
subBuilder = Json.createObjectBuilder();
subBuilder.add("index", r.getIndex());
subBuilder.add("level", r.getLevel());
subBuilder.add("planed_level", r.getPlanedLevel());
subBuilder.add("player_uuid", r.getPlayerUUIDAsString());
subBuilder.add("unlocked", r.getUnlocked());
subBuilder.add("savedInPlayer", "yes");
mainBuilder.add(index+"", subBuilder.build());
}
String q = "";
q += "user_uuid:" + getUUID().toString() + ";";
q += "research_json:" + mainBuilder.build();
t.insertUpdate(q).sync();
}
<!-- https://mvnrepository.com/artifact/javax.json/javax.json-api -->
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish/javax.json -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.4</version>
</dependency>
这个方法我每2分钟从一个线程调用一次。我在游戏中有15个用户,所以它运行了15次。它创建了一个JSON对象和我保存到MySQL数据库的JSON对象。所以我预计会有15个例子。
问题是几个小时后,Tomcat服务器崩溃,并显示以下消息。
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000007b5400000, 1048576, 0) failed; error='Cannot allocate memory' (errno=12)
There is insufficient memory for the Java Runtime Environment to continue.
Native memory allocation (mmap) failed to map 1048576 bytes for committing reserved memory.
An error report file with more information is saved as:
/tmp/hs_err_pid11069.log
在第一个图像中,您可以看到相同的用户json对象。
2小时后看起来像这样
大约5个小时后,它的内存就用完了
我不知道为什么生成器会导致这种内存泄漏,我的知识还不足以解决它。也许你能帮我。
我将非常感激。非常感谢你。
SpiderMySQL
还有javax。json。Json;javax。json。JSONObject Builder;