Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单例对象是在java中每会话或每服务器启动创建的吗_Java_Design Patterns_Singleton - Fatal编程技术网

单例对象是在java中每会话或每服务器启动创建的吗

单例对象是在java中每会话或每服务器启动创建的吗,java,design-patterns,singleton,Java,Design Patterns,Singleton,我在网上没有得到任何答案,请发送答案 是java中每个会话或每个服务器启动创建的单例对象 假设db连接对象在我的应用程序中是单例的,我在服务器中部署了我的应用程序 问题 是否连接服务器中现在存在Singleton。因为版本中存在所有.class文件。 用户键入的主页URL主页不需要连接对象,只是html页面中有内容,页面已加载。是否连接服务器中现在存在Singleton。 用户试图立即登录,需要连接异议。此第一个请求将创建singleton对象。 假设创建了连接对象,该对象是否用于世界各地的所有

我在网上没有得到任何答案,请发送答案

是java中每个会话或每个服务器启动创建的单例对象

假设db连接对象在我的应用程序中是单例的,我在服务器中部署了我的应用程序

问题

是否连接服务器中现在存在Singleton。因为版本中存在所有.class文件。 用户键入的主页URL主页不需要连接对象,只是html页面中有内容,页面已加载。是否连接服务器中现在存在Singleton。 用户试图立即登录,需要连接异议。此第一个请求将创建singleton对象。 假设创建了连接对象,该对象是否用于世界各地的所有用户 这个连接有多长时间 下一版本部署将清除singleton对象。
请回答。

每个类加载器创建一个单例实例。如果您的应用程序使用单个类加载器,那么您的单例就可以通过JVM的所有活动部分使用

你的问题非常广泛,6个问题合一,已经在本网站和博客的几篇文章中讨论过了。不过,这里有一个简短的解释:

让我们假设db连接对象在我的应用程序中是单例的

这是一个不容忽视的问题。您的数据库连接决不能是yes、粗体和大写,以确保您和每个读者不会将此错误作为单一对象。您的连接con不能是singleton的一部分,以使其始终处于打开状态。相反,请使用适当的数据库连接池,该池将负责打开必要的物理数据库连接,并在应用程序的整个运行过程中保持它们的活动状态

现在,针对您的具体问题:

是否连接服务器中现在存在Singleton。因为版本中存在所有.class文件。 当类加载器初始化它时,它将存在。这意味着,当任何一段代码必须第一次调用单例引用时,对象将被初始化。如果在应用程序部署期间没有执行任何代码行调用您的单例引用,那么它还没有创建

用户键入的主页URL主页不需要连接对象,只是html页面中有内容,页面已加载。是否连接服务器中现在存在Singleton。 这一点在第1节中进行了解释

用户试图立即登录,需要连接异议。此第一个请求将创建singleton对象。 答案可以从1中推断出来

假设创建了连接对象,该对象是否用于世界各地的所有用户 对

这个连接有多长时间 它将一直存在,直到类从类加载器中卸载。根据发送到JVM的执行参数,这可能意味着永远不会卸载该类,这意味着您已经产生了内存泄漏,并且如果您确保此物理数据库连接不能终止,则可能会始终打开一个连接,以便重新发明轮子,而不是使用数据库连接池。如果类加载器永远不会卸载类,那么当JVM停止时,这个单例对象将死亡

下一版本部署是否会清除singleton对象 从5点开始:没有


如您所见,这是一个非常糟糕的主意—在您的应用程序中单独创建一个单例,不管它是用于数据库连接还是任何您想要/需要的,除非您明确知道您正在做什么,并且您知道要向JVM发送什么参数。否则,请不要这样做。

请发送问题。当然,只允许一个问题实例?显示您的代码,请告诉我们服务器是什么,等等。感谢您的好答案,LuiggiMendoza@user1365766答案更新。非常感谢你,路易吉。。。