1. 怎樣查看java線程內存使用情況

首先加入一個靜態方法:
public static long getMemory() {
return Runtime.getRuntime().freeMemory();
}
這個是查看運行時空閑內存的語句。
線程啟動前
long point1 = getMemory();
線程調用
long point2 = getMemory();

兩數之差 就是佔用內存

2. 在java中是否能限制每個線程的佔用內存

進程是可以控制的,線程的是沒法控制的。只能增大XmxXms這些參數,或者優化程序。
避免因為用戶查詢大量數據佔用內存這個可以通過程序優化的方式來解決,比如:用分頁、動態分頁、流的方式向前台輸出數據。

3. java 創建多個線程,為什麼線程是一同進入內存的

建議去看看多線程的底層原理,以及為何要使用多線程!!
為何要使用多線程?答:多線程就象是人體一樣,一直在並行的做許多工作,例如,人可以同時呼吸,血液循環,消化食物的。多線程可以將一個程序劃分成多個任務,他們彼此獨立的工作,以方便有效的使用處理器和用戶的時間.這種比喻精闢,只要我們的機器資源夠用,就要盡量提高程序的執行速度,這樣能讓用戶感到舒服。
如果要想實現線程同步可以考慮線程同步的問題!
線程同步的方法:
wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。
Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。

4. jvm中線程本地內存是真實存在的,還是一個抽象概念

jvm內存模型:Java代碼是運行在Java虛擬機之上的,由Java虛擬機通過解釋執行(解釋器)或編譯執行(即時編譯器)來完成,故Java內存模型,也就是指Java虛擬機的運行時內存模型。

運行時內存模型,分為線程私有和共享數據區兩大類,其中線程私有的數據區包含程序計數器、虛擬機棧、本地方法區,所有線程共享的數據區包含Java堆、方法區,在方法區內有一個常量池。java運行時的內存模型圖,如下:

從圖中,可知內存分為線程私有和共享兩大類:

(1)線程私有區,包含以下3類:
程序計數器,記錄正在執行的虛擬機位元組碼的地址;
虛擬機棧:方法執行的內存區,每個方法執行時會在虛擬機棧中創建棧幀;
本地方法棧:虛擬機的Native方法執行的內存區;

(2)線程共享區,包含以下2類
Java堆:對象分配內存的區域;
方法區:存放類信息、常量、靜態變數、編譯器編譯後的代碼等數據;
常量池:存放編譯器生成的各種字面量和符號引用,是方法區的一部分。

樓主提到的Java棧,一般而言是指圖中的虛擬機棧,在代碼中的方法調用過程中,往往需要從一個方法跳轉到另一個方法,執行完再返回,那麼在跳轉之前需要在當前方法的基本信息壓入棧中保存再跳轉。

三、關於寄存器的問題

對於java最常用的虛擬機,sun公司提供的hotspot虛擬機,是基於棧的虛擬機;而對於android的虛擬機,則採用google提供的dalvik,art兩種虛擬機,在android 5.0以後便默認採用art虛擬機,這是基於寄存器的虛擬機。 樓主問的是jvm(即java vm),這是基於棧的虛擬機。那麼關於虛擬機棧,這塊內存的內容,我們再進一步詳細分析,如下圖:

可以看到,在虛擬機棧有一幀幀的 棧幀組成,而棧幀包含局部變數表,操作棧等子項,那麼線程在運行的時候,代碼在運行時,是通過程序計數器不斷執行下一條指令。真正指令運算等操作時通過控制操作棧的操作數入棧和出棧,將操作數在局部變數表和操作棧之間轉移。

5. 在 java中 線程的工作內存,是不是指的就是,操作數棧 和 局部變數表 求解答!!!

並不是一個層次上的概念,線程中的工作內存可以類比與操作系統中的數據緩存區域,而局部變數表中的變數與操作數棧在虛擬機分配內存時,有可能會分配帶數據緩存區域。

6. Java如何獲取某個線程所使用的內存的大小

要實時查看某個Thread所使用的內存大小並沒有具體的語句。

但是可以通過前後對比法進行階段性監控與分析。

首先加入一個靜態方法:
public static long getMemory() {
return Runtime.getRuntime().freeMemory();
}

這個是查看運行時空閑內存的語句。

所以應該在需要檢測的線程執行點前後進行插樁。

long point1 = getMemory();
線程調用
long point2 = getMemory();

注意:另外,在這個過程中不應該有其他的干擾(調用其他線程或者其他操作)

甚至可以在線程中進行插樁,然後分析所有點的數值變化,根據數值差,就可以得出答案。

7. java 線程結束為什麼還會操作內存

新建一個線程後,啟動該線程.可以是多個.
而此時的main()函數就是主線程,其他線程與他同時進行.main()里的語句執行完畢後就自然結束了(即主線程結束).無須做過多處理.

8. 如何查看java線程佔用的內存

首先加入一個靜態方法:
public static long getMemory() {
return Runtime.getRuntime().freeMemory();
}
這個是查看運行時空閑內存的語句。
線程啟動前
long point1 = getMemory();
線程調用
long point2 = getMemory();

兩數之差 就是佔用內存

9. java 線程什麼時候會從主內存刷新本地緩存

你的4個變數一旦聲明會自動在內存中創建。
jvm也沒有你說的緩存,高速緩存這些東西,全部放在堆內存中。

堆內存中的東西在GC的時候會移動