最小化java ee堆使用的策略

时间:2015-10-27 09:33:08

标签: java mysql dictionary heap-memory

我正在构建一个翻译E书的应用程序。我有字典文件是.csv文件,我填入java哈希映射。这些词典的容量高达150 MB。我要解决的问题是,为了在localhost中正常工作,我需要将java堆大小增加到512 MB - 对于一个用户我自己这样可以正常工作。当有很多用户使用该应用程序时,我不知道这将如何表现。所以我使用了很多堆。我试图将我的词典移动到mysql数据库 - 但是现在每个单词都可以(可能高达150 000单电子书的话)我正在访问数据库 - 这减少了堆的使用,但是,如果我有更多的用户同时使用该应用程序它会很糟糕。我想第一次解析电子书两次来放置所有单词进入java集 - 只获取电子书中的唯一单词,只将这些单词放入哈希映射字典中,或者当时调用mysql表示多个单词(使用sql"在"运算符中) 。由于java托管按堆使用定价,你可以给我一个替代方法,可以最小化我的用例的堆大小使用。 这是我使用mysql数据库的方式:

public final class ConnectionStrings {


       private String USERNAME="root";
       private String PASSWORD="";
       private  String CONN_STRING="jdbc:mysql://localhost/dictionary?useUnicode=true&characterEncoding=utf-8"; 


       public ConnectionStrings() 
       {

       }
       public String getUsername()
       {        return this.USERNAME;
       }

        public String getPassword()
       {        return this.PASSWORD;
       }

          public String getConnString()
       {        return this.CONN_STRING;
       }





}

这是从mysql

获取数据的方法
public static String getMySQlTranslation(String word, String combination) throws ClassNotFoundException, SQLException {
    ConnectionStrings c = new ConnectionStrings();
    String CONN_STRING = c.getConnString();
    String USERNAME = c.getUsername();
    String PASSWORD = c.getPassword();

    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;

    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD);

    String returnedWord = "-";

    String upit = "select translated_word from dictionary where native_word = ? and combination= ? limit 1";
    stmt = conn.prepareStatement(upit);
    stmt.setString(1, word);
    stmt.setString(2, combination);

    rs = stmt.executeQuery();
    while (rs.next()) {
        returnedWord = rs.getString("translated_word");

    }

    stmt.close();
    rs.close();
    conn.close();

    return returnedWord;
}//

这是在代码中调用方法的方式

translated_word=Translator.getMySQlTranslation(check, description);

0 个答案:

没有答案