JAVA性能洞察,重构现有代码
我有如下代码,目标是将数据层的输出转换为通用数据格式,以便其他层可以使用 在LT运行期间,我观察到这种方法占用了相当多的cpu时间,但与所有时间相比,它看起来还是可以管理的 但担心当它进行压力测试时,它可能会崩溃,所以考虑进行重构以消除对象映射器的使用,并通过迭代进行转换 我不太喜欢将一个对象转换为字符串,然后再转换回另一个对象结构。我的信念是避免转换(对象-->字符串-->对象),这样可以节省时间和内存。这是正确的假设吗JAVA性能洞察,重构现有代码,java,jackson,Java,Jackson,我有如下代码,目标是将数据层的输出转换为通用数据格式,以便其他层可以使用 在LT运行期间,我观察到这种方法占用了相当多的cpu时间,但与所有时间相比,它看起来还是可以管理的 但担心当它进行压力测试时,它可能会崩溃,所以考虑进行重构以消除对象映射器的使用,并通过迭代进行转换 我不太喜欢将一个对象转换为字符串,然后再转换回另一个对象结构。我的信念是避免转换(对象-->字符串-->对象),这样可以节省时间和内存。这是正确的假设吗 ObjectMapper om = new com.fasterxml.
ObjectMapper om = new com.fasterxml.jackson.databind.ObjectMapper();
String listGridData = om.writeValueAsString(com.fasterxml.jackson.databind.node.ArrayNode grid);
List<Map<String, Object>> responseList = om.readValue(listGridData,
new TypeReference<List<Map<String, Object>>>() {
});
ObjectMapper om=new com.fasterxml.jackson.databind.ObjectMapper();
字符串listGridData=om.writeValueAsString(com.fasterxml.jackson.databind.node.ArrayNode网格);
List responseList=om.readValue(listGridData,
新类型引用(){
});
您希望重用ObjectMapper。每个应用程序应该有一个实例。对象映射器是线程安全的,重用它没有问题
从性能角度来看,第二行不是问题。有没有它几乎是一样的
第三行的性能取决于要解析字符串的对象的复杂性。它越复杂,初始化的引用就越多,占用的内存就越多。这将对性能产生影响
在第三步中解析到的对象的轻量级与内存管理以及ObjectMapper的重用一起至关重要