在java Web应用程序中使用静态方法和变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在java Web应用程序中使用静态方法和变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2645字,纯文字阅读大概需要4分钟。
内容图文
![在java Web应用程序中使用静态方法和变量](/upload/InfoBanner/zyjiaocheng/794/2ec5b61c317043f1952fc0e4f2dea302.jpg)
我的网络应用程序标题中有一个搜索框,并使用自动填充功能帮助用户按作者姓名或书名来查找书籍.在用户输入上,oninput()函数通过ajax调用servlet FindBooks. 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类中使用了静态方法,以避免为每个应用程序会话加载数据.因此它只会加载一次,然后可以由不同的会话共享.但由于静态方法只有一个副本,并且所有会话都使用相同的静态方法来获取数据.他们是否必须等待其他会话正在使用该方法,或者所有会话可以同时访问它?如果是,它是否会影响应用程序的性能.如果否,JVM如何管理单个副本的并发访问?最后,根据我的理解,只要类SuggestionBook不是垃圾收集,数据将保留在内存中.将数据结构用作类变量而不是实例变量是一种正确的方法,因为它们会在较长时间内阻塞可用内存.
解决方法:
Do they have to wait while some other session is using the method or it can be accessed simultaneously by all sessions ?
不,他们不必等待,是的,他们可以同时访问.
同时从多个会话访问同一对象可以是a
问题,但不一定是.例如,如果两个会话执行
同时访问对象而不改变其状态
精细.如果他们确实改变了状态并且状态转换涉及不稳定
中间状态可能会出现问题.
如果两个线程同时运行相同的方法,则它们的代码指针都指向该方法,并在其堆栈上拥有自己的参数和局部变量副本.如果堆栈上的东西指向堆上的相同对象,它们只会相互干扰.
If Yes, does it affect the performance of the application. If No, how this concurrent access of a single copy is managed by JVM ?
java中的内存分为两类 – 堆和堆栈.堆是所有对象都存在的地方,堆栈是线程工作的地方.每个线程都有自己的堆栈,无法访问其他堆栈.每个线程还有一个指向代码的指针,指向它们当前正在运行的代码位.当一个线程开始运行一个新方法时,它会将该方法中的参数和局部变量保存在自己的堆栈中.其中一些值可能是指向堆上对象的指针.
Lastly, as per my understanding data will stay in the memory as long as class SuggestionBook is not garbage collected. Is it a right approach to use data structures as class variables than instance variables, as they will block available memory for longer time.
由于您正在使用servlet,因此在webapp的启动时只创建一个servlet实例,并在所有请求之间共享.静态与否,每个类/实例变量将在所有请求/会话之间共享.
Servlet只有一个实例,实例变量就像一个静态变量.因此,不要求人们通过使变量静态而不是实例来了解单个实例(因为许多人不知道),而是消除了使用中的任何混淆.因此,变量的意图更清晰,不太可能被误解.因此,可用性并不是一个糟糕的方法.
内容总结
以上是互联网集市为您收集整理的在java Web应用程序中使用静态方法和变量全部内容,希望文章能够帮你解决在java Web应用程序中使用静态方法和变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。