日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java启动参数与内存调优一些学习笔记

發(fā)布時間:2023/12/3 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java启动参数与内存调优一些学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自??Java啟動參數(shù)與內(nèi)存調(diào)優(yōu)一些學(xué)習(xí)筆記

.參數(shù)的含義
-Xms128m JVM初始分配的堆內(nèi)存
-Xmx512m JVM最大允許分配的堆內(nèi)存,按需分配
-XX:PermSize=64M JVM初始分配的非堆內(nèi)存

-XX:MaxPermSize=128M JVM最大允許分配的非堆內(nèi)存,按需分配

JVM內(nèi)存模型

1、程序計數(shù)器

程序計數(shù)器(Program Counter Register)是一塊較小的內(nèi)存空間,它的作用可以看做是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器。

?

?

2、Java 虛擬機(jī)棧

與程序計數(shù)器一樣,Java 虛擬機(jī)棧(Java Virtual Machine Stacks)也是線程私有的,它的生命周期與線程相同。

Java 內(nèi)存區(qū)分為堆內(nèi)存(Heap)和棧內(nèi)存(Stack),這種分法比較粗糙,Java?內(nèi)存區(qū)域的劃分實(shí)際上遠(yuǎn)比這復(fù)雜。
?

3、本地方法棧

本地方法棧(Native Method Stacks)與虛擬機(jī)棧所發(fā)揮的作用是非常相似的,其區(qū)別不過是虛擬機(jī)棧為虛擬機(jī)執(zhí)行Java 方法(也就是字節(jié)碼)服務(wù),而本地方法棧則是為虛擬機(jī)使用到的Native 方法服務(wù)。

?

4、Java 堆
Java 堆中還可以細(xì)分為:新生代和老年代;

再細(xì)致一點(diǎn)的有Eden 空間、From Survivor 空間、To Survivor 空間等。如果從內(nèi)存分配的角度看,線程共享的Java 堆中可能劃分出多個線程私有的分配緩沖區(qū)(Thread LocalAllocation Buffer,TLAB)。不過,無論如何劃分,都與存放內(nèi)容無關(guān),無論哪個區(qū)域,存儲的都仍然是對象實(shí)例,進(jìn)一步劃分的目的是為了更好地回收內(nèi)存,或者更快地分配內(nèi)存。

?

5、方法區(qū)
雖然Java 虛擬機(jī)規(guī)范把方法區(qū)描述為堆的一個邏輯部分,但是它卻有一個別名叫做Non-Heap(非堆),目的應(yīng)該是與Java 堆區(qū)分開來。

對于習(xí)慣在HotSpot 虛擬機(jī)上開發(fā)和部署程序的開發(fā)者來說,很多人愿意把方法區(qū)稱為“永久代”(Permanent Generation),本質(zhì)上兩者并不等價。

?

?

6、運(yùn)行時常量池

運(yùn)行時常量池(Runtime Constant Pool)是方法區(qū)的一部分。

?

6、直接內(nèi)存
直接內(nèi)存(Direct Memory)并不是虛擬機(jī)運(yùn)行時數(shù)據(jù)區(qū)的一部分,也不是Java虛擬機(jī)規(guī)范中定義的內(nèi)存區(qū)域,但是這部分內(nèi)存也被頻繁地使用,而且也可能導(dǎo)致OutOfMemoryError 異常出現(xiàn),

?

jdk1.7常用的調(diào)試命令

1.jps

查看java進(jìn)程號,例如:
D:\jdk7\bin>jps
9616 Jps
4136 org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar

上例的 4136 就是java進(jìn)程號(eclispe的)

?

2.jstat -gc 進(jìn)程號
查看某進(jìn)程gc情況,例如:

D:\jdk7\bin>jstat -gc 4136
?S0C??? S1C??? S0U??? S1U????? EC?????? EU??????? OC???????? OU?????? PC???? PU
?? YGC???? YGCT??? FGC??? FGCT???? GCT
44544.0 44544.0? 0.0?? 44540.0 268800.0 139260.2? 715776.0?? 105657.3? 101376.0
101048.6????? 3??? 0.310?? 0????? 0.000??? 0.310
?

3.jstat -gcutil 進(jìn)程號
查看某進(jìn)程gc情況 ,百分比情況:

D:\jdk7\bin>jstat -gcutil 4136
? S0???? S1???? E????? O????? P???? YGC???? YGCT??? FGC??? FGCT???? GCT
? 0.00? 99.99? 51.81? 14.76? 99.68????? 3??? 0.310???? 0??? 0.000??? 0.310


4.jinfo 進(jìn)程號
查看某進(jìn)程的java運(yùn)行期參數(shù)
jinfo -flag CMSInitiatingOccupancyFraction
查看指定參數(shù)的值

5.jmap -dump:format=b,file=eclipse.bin? 進(jìn)程號
dump指定的進(jìn)程到文件。


6. jhat 文件名
分析dump文件,生產(chǎn)報告,默認(rèn)訪問地址http://localhost:7000/

?

7.jvisualvm.exe可視化的java內(nèi)存分析工具。新一代分析工具功能強(qiáng)大。

增加了gc插件后的界面,增加插件的方法 工具-〉插件-〉可用插件-〉Visual GC

但是,注意Visual VM分析工具本身也是挺消耗系統(tǒng)性能的。

經(jīng)驗(yàn):

1.使用Spring 和hibatnatie等框架,容易引起永久代”(Permanent Generation)占滿,動態(tài)代理類的原因?

2.使用Apache NIO的類包,容易引發(fā)直接內(nèi)存(Direct Memory)占滿。

3.JVM內(nèi)存并非越大越好,32位JVM有時候比64位JVM運(yùn)行速度更快。如果,要消耗機(jī)器硬件性能,不妨多啟動幾個Tomcat,分別用不同端口。32JVM的內(nèi)存管理不能超過2GB,64位JVM才可以超過4GB。

(理論上來說32位的JVM有4G的堆大小限制。但是因?yàn)楦鞣N條件限制比如交換區(qū),內(nèi)核地址空間使用,內(nèi)存碎片,虛擬管理機(jī)的管理開銷,實(shí)際上可用的堆的大小遠(yuǎn)遠(yuǎn)比理論上的4G要少。
在32位windows的機(jī)器上,堆最大可以達(dá)到1.4G至1.6G。
在32位solaris的機(jī)器上,堆最大可以達(dá)到2G
而在64位的操作系統(tǒng)上,32位的JVM,堆大小可以達(dá)到4G)

4.在linux環(huán)境下 ,kill?-3?pid??的方式發(fā)送一個SIGQUIT信號給Java應(yīng)用之后,通常會有當(dāng)前的Thread Dump輸出。(嚇唬JVM輸出Dump),但是,服務(wù)器環(huán)境的 dump動 不動 就是上G的文件,即使Dump出來也很難分析。

5.一種土辦法是 卸載可能產(chǎn)生問題的模塊,按個去試試是否會內(nèi)存溢出。這跟修電腦的原理有點(diǎn)類似。

?

總結(jié)

以上是生活随笔為你收集整理的Java启动参数与内存调优一些学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。