ciao andbin!
ho modifcato il codice così e funziona:
codice:
public static void main(String[] args) throws IOException {
final HttpServer server = startServer();
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Runtime runtime = Runtime.getRuntime();
long memoryBytes = runtime.totalMemory() - runtime.freeMemory();
long memoryMBytes = memoryBytes / MEGABYTE;
System.out.println("MB usati: " + memoryMBytes);
if (memoryMBytes > 80) {
runtime.gc();
System.out.println("Memoria pulita!");
}
}
}, 5000, 5000);
System.out.println(String.format("Jersey app started with WADL available at %sapplication.wadl\nHit enter to stop it...", BASE_URI));
System.in.read();
timer.cancel();
server.shutdownNow();
}
in effetti la memoria in questi test viene ripulita.
quando supera gli 80 MB, viene portata sui 10 MB.
però, se il gc() è solo un suggerimento, c'è un altro modo per essere sicuro che la memoria venga ripulita nel caso superi una certa soglia?