Singleton
根據ClassLoader
創建實例。與Singleton
,ClassLoader
不同,如果該類不是Singleton
,則會在遇到該類的對象創建時創建另一個對象。每個會話多個對象vs單獨對象
我的問題是:可以在那裏'n'
每個會話的類的對象數?
Singleton
根據ClassLoader
創建實例。與Singleton
,ClassLoader
不同,如果該類不是Singleton
,則會在遇到該類的對象創建時創建另一個對象。每個會話多個對象vs單獨對象
我的問題是:可以在那裏'n'
每個會話的類的對象數?
有需要發生之前,你可以在「使用」一類的實例三樣東西,其中每一個需要堆內存的分配:
字節碼需要加載和鏈接的類來解決任何靜態依賴於其他類。 該類需要初始化。 需要創建類的實例。 類的加載和鏈接通常在啓動JVM時發生,儘管它可以由JVM「懶惰地」完成,並且可以動態完成;例如使用Class.forName(...)。這是分配類「代碼」的內存的時候。
類初始化通常在第一次實際使用該類之前立即完成。 (具體細節在JLS中列出)。這是分配類靜態內存的時候。
使用新構造時會發生類創建。這也會觸發尚未初始化的類的類初始化。這是當一個實例的內存分配時
是的,你可以在會話範圍內有2個非單例類的對象。
如果你想確保你的會話將有n個你的類的實例,而不是更多的實現這種行爲是由你來決定的。和Singleton一樣。 Java不提供確保Singleton模式實現的機制。它可以是程序員,也可以是一些可以做到的框架。所以,如果你想要一個預先定義好的班級實例,這是你的責任。這裏是最簡單的想法:
public class MyTest {
private static List<MyTest> instances = new ArrayList<>(5);
static {
for(int i = 0; i < 5; i++) {
instances.add(new MyTest());
}
}
public static MyTest getInstance() {
return instances.get(3 /*or whatever logic to determine which one/*);
}
...
}
什麼是'session'? –
ClassLoaders不處理對象實例化,甚至不能進行類初始化。他們所做的只是*加載*類並提供對資源的訪問。 「單身」也不是Java所固有的類別特徵;相反,它是一些類的實現的表徵。 –
你真的想知道什麼?是否可以有多個非單例類的實例?答案應該很明顯,對嗎? –