【发布时间】:2015-03-02 19:44:26
【问题描述】:
我的 Web 应用程序的标题中有一个搜索框,并使用自动完成功能帮助用户按作者姓名或书名查找书籍。在用户输入时,oninput() 函数调用 servlet FindBooks 到 ajax。 FindBooks servlet 调用 SuggestionBook 类的静态方法 suggest(),该方法返回与输入字符串匹配的书籍数组。
FindBooks.java
JSONArray books = SuggestionBook.suggest(inputString);
out.print(books);
SuggestionBook.java
private static boolean isTernaryEmpty = true;
private static Ternary ternary;
private static void fillTernary() {
// fills ternary search tree with data.
isTernaryEmpty = false;
}
public static JSONArray suggest(String searchString) {
if(isTernaryEmpty) {
fillTernary();
}
return ternary.find(searchString);
}
我在SuggestionBook.java 类中使用了static 方法,以避免为应用程序的每个会话加载数据。所以它只会被加载一次,然后可以被不同的会话共享。但是由于静态方法只有一个副本,并且所有会话都使用相同的static 方法来获取数据。当其他会话正在使用该方法时,他们是否必须等待,或者所有会话都可以同时访问它?如果是,是否会影响应用程序的性能。如果否,JVM 如何管理单个副本的并发访问?最后,根据我的理解,只要类SuggestionBook 未被垃圾收集,数据就会保留在内存中。将数据结构用作class variables 而不是instance variables 是正确的方法吗,因为它们会阻塞可用内存更长的时间。
【问题讨论】:
-
请学习how to accept an answer 如果答案没有帮助,您可以发表评论,要求该人提供更多说明。
标签: java web-applications autocomplete static