Senhores,
Estou tendo um grande problema! Estou trabalhando em uma aplicação que foi desenvolvida com " as piores " formas imagináveis!
Nessa aplicação temos algumas classes genéricas (gigantescas) e, apenas com métodos “static” e muitas…muitas…muitas STRINGS (na maioria dos casos, são SELECT grandes)
Exemplo:
public static String sql_1_de_100000(paramentros){
String sql = "";
sql = "SELECT 1,2,3,4 ";
sql += "FROM tabela;
return sql;
}
1ª A aplicação é WEB, e até que restartamos o TOMCAT esses métodos ficam na memória né???
2ª Essas strings estão alocadas na “Área Permanente” da JVM, pois com o passar do tempo temos a “exception: PermGen”, e pelo que li, o garbage não coleta os objetos criados nessa área, a questão é: teria alguma forma de eu usar esses métodos de forma que tais objetos ocupem a área de memória Heap??? Assim quando não houverem mais referencias, nosso amigo Colector remove-os!
3ª O código abaixo cria novas String, devido o operador ‘+’ ??
public static String sql_1_de_100000(paramentros){
String sql = "";
sql = "SELECT 1,2,3,4 " + " FROM tabela;
return sql;
}
4ª O código abaixo cria novas String, devido o operador + dentro do construtor StringBuffer??
public static String sql_1_de_100000(paramentros){
StringBuffer sql = null;
sql = new StringBuffer("SELECT 1,2,3,4 " + " FROM tabela");
sql.append("where coluna = 2");
return sql.toString();
}
Desde já agradeço!