我有一個Java程序,它需要使用導入的源代碼包中的一個函數,該程序包會將2GB數據加載到內存中並使用它進行計算。Java - 將數據加載到內存一次,並多次使用
但每次我調用函數時,加載過程都會被處理,這非常耗時。
我的程序的結構是這樣的:
Socket Server (listening on a port)
|_ Multi Server Thread (Work as a input stream reader)
...|_ Sample Protocol (deal with the input steam using the data related functions)
我知道這是一個問題,太寬,但:
有沒有我可以只運行一次裝載和使用任何總體思路它在事後做所有的計算?
如果我在頂層導入包(在套接字服務器中),是否可以幫助我以某種方式加速加載過程?
企業使用哪種更常用的方法?
這是一個相當廣泛的問題,但如果您真的想要並且可以將所有數據存儲在堆內存中(由於對象開銷,這可能比2GB持久數據多得多),只需指定一個實例或靜態 - 在開始加載過程之前,已經將已處理的數據與已確定範圍的變量一起保存。如果需要,您還可以添加同步機制以在後檯安全地刷新它。 – Mena
我最近在我的辦公室裏有一些數據。我從星期天的七種方式開始討論它。您無法解決這樣的事實,即加載一次非常耗時,並且在一個實例中,數據太多,導致在該盒子上導致堆分配錯誤。你無法加速太多,但如果你可以在最高層加載一次,它會讓所有其他類使用它。您還需要對其進行同步,以便所有線程都一起崩潰到數據中。 –
確保您瞭解從不同線程看到的陳舊指針的影響。當一個線程將2GB數據保存在一個變量中時,另一個線程仍然可以看到'null'並再次加載數據。 –