Gson - problemy z pamięcią. Wykorzystanie JsonWriter?

Odpowiedz Nowy wątek
2018-11-02 13:19
Złoty Kret
0

Cześć

Mam sobie obiekt, który chcę zserializować. Wykorzystuję do tego Gsona. Problem polega na tym, że w niektórych przypadkach, gdzie rekordów jest bardzo dużo następuje problem z pamięcią (Java heap space). Pomimo poszerzenia parametrów JVM nadal to występuje. Wyczytałem, że można spróbować streamu za pomocą JsonWriter.
Czytam jednak poradniki i praktycznie w każdym tworzone są "ręcznie" pary klucz-wartość dla obiektu. U mnie takich par byłoby 150, więc jest to trochę żmudny proces :-/
I przechodząc do meritum czy rozwiązanie problemu z brakiem pamięci to wykorzystanie JsonWriter? Jeżeli tak to jak z tego skorzystać?

A musisz to wysyłać jako jeden json? Możliwe jest podzielenie tego na paczki i wysłanie w kilku częściach ? - eL 2018-11-02 13:29

Pozostało 580 znaków

2018-11-02 14:20
0

Ile masz tych obiektów? 10 milionów? Wtedy jakby problemy z pamięcią mogą powstać.
Poza tym, jeśli masz kilka milionów obiektów to rozwiązaniem będzie użycie czegoś w stylu
https://google.github.io/gson[...]oogle.gson.stream.JsonWriter-
Nic nie musisz ręcznie kodować.
Strzelam jakkolwiek, że Ty masz zupełnie gdzie indziej problem. Pokaż kod.


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.

Pozostało 580 znaków

2018-11-02 14:46
Złoty Kret
0

10 milionów to na pewno niet :P
Natomiast problem jest i nie wiem czemu tak naprawdę mi to wywala (problem nie występuje dla wszystkich obiektów, lecz tylko niektórych)
Kod jest następujący:

private void sendFile(sessContext sc){
String shipId = sc.getRequest().getParameter("shipid");
Ship ship = m_ship.find(Long.parseLong(shipId));
Gson gson = new GsonBuilder()
                .excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT, Modifier.VOLATILE)
                .setPrettyPrinting()
                .create();

try{
String toJson = gson.toJson(ship); // to już nie daje rady wykonać
sendFile(sc,ship);}
catch(Excepiton e){
 e.printStackTrace();
        }
}
To pokaż jeszcze jak ten Ship wygląda. - jarekr000000 2018-11-02 14:55

Pozostało 580 znaków

2018-11-02 21:15
1

Coś się zapętla.
@JsonIgnore
Na odpowiednim polu załatwi sprawę

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0