偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JVM調(diào)優(yōu)總結(jié):反思

開(kāi)發(fā) 后端
Java的垃圾回收確實(shí)帶來(lái)了很多好處,為開(kāi)發(fā)帶來(lái)了便利。但是在一些高性能、高并發(fā)的情況下,垃圾回收確成為了制約Java應(yīng)用的瓶頸。

垃圾回收的悖論

所謂“成也蕭何敗蕭何”。Java的垃圾回收確實(shí)帶來(lái)了很多好處,為開(kāi)發(fā)帶來(lái)了便利。但是在一些高性能、高并發(fā)的情況下,垃圾回收確成為了制約Java應(yīng)用的瓶頸。目前JDK的垃圾回收算法,始終無(wú)法解決垃圾回收時(shí)的暫停問(wèn)題,因?yàn)檫@個(gè)暫停嚴(yán)重影響了程序的相應(yīng)時(shí)間,造成擁塞或堆積。這也是后續(xù)JDK增加G1算法的一個(gè)重要原因。

當(dāng)然,上面是從技術(shù)角度出發(fā)解決垃圾回收帶來(lái)的問(wèn)題,但是從系統(tǒng)設(shè)計(jì)方面我們就需要問(wèn)一下了:

我們需要分配如此大的內(nèi)存空間給應(yīng)用嗎?
我們是否能夠通過(guò)有效使用內(nèi)存而不是通過(guò)擴(kuò)大內(nèi)存的方式來(lái)設(shè)計(jì)我們的系統(tǒng)呢? 

我們的內(nèi)存中都放了什么

內(nèi)存中需要放什么呢?個(gè)人認(rèn)為,內(nèi)存中需要放的是你的應(yīng)用需要在不久的將來(lái)再次用到到的東西。想想看,如果你在將來(lái)不用這些東西,何必放內(nèi)存呢?放文件、數(shù)據(jù)庫(kù)不是更好?這些東西一般包括:

1. 系統(tǒng)運(yùn)行時(shí)業(yè)務(wù)相關(guān)的數(shù)據(jù)。比如web應(yīng)用中的session、即時(shí)消息的session等。這些數(shù)據(jù)一般在一個(gè)用戶(hù)訪問(wèn)周期或者一個(gè)使用過(guò)程中都需要存在。 
2. 緩存。緩存就比較多了,你所要快速訪問(wèn)的都可以放這里面。其實(shí)上面的業(yè)務(wù)數(shù)據(jù)也可以理解為一種緩存。 
3. 線程。

因此,我們是不是可以這么認(rèn)為,如果我們不把業(yè)務(wù)數(shù)據(jù)和緩存放在JVM中,或者把他們獨(dú)立出來(lái),那么Java應(yīng)用使用時(shí)所需的內(nèi)存將會(huì)大大減少,同時(shí)垃圾回收時(shí)間也會(huì)相應(yīng)減少。

我認(rèn)為這是可能的。

解決之道

數(shù)據(jù)庫(kù)、文件系統(tǒng)

把所有數(shù)據(jù)都放入數(shù)據(jù)庫(kù)或者文件系統(tǒng),這是一種最為簡(jiǎn)單的方式。在這種方式下,Java應(yīng)用的內(nèi)存基本上等于處理一次峰值并發(fā)請(qǐng)求所需的內(nèi)存。數(shù)據(jù)的獲取都在每次請(qǐng)求時(shí)從數(shù)據(jù)庫(kù)和文件系統(tǒng)中獲取。也可以理解為,一次業(yè)務(wù)訪問(wèn)以后,所有對(duì)象都可以進(jìn)行回收了。

這是一種內(nèi)存使用最有效的方式,但是從應(yīng)用角度來(lái)說(shuō),這種方式很低效。

內(nèi)存-硬盤(pán)映射

上面的問(wèn)題是因?yàn)槲覀兪褂昧宋募到y(tǒng)帶來(lái)了低效。但是如果我們不是讀寫(xiě)硬盤(pán),而是寫(xiě)內(nèi)存的話效率將會(huì)提高很多。

數(shù)據(jù)庫(kù)和文件系統(tǒng)都是實(shí)實(shí)在在進(jìn)行了持久化,但是當(dāng)我們并不需要這樣持久化的時(shí)候,我們可以做一些變通——把內(nèi)存當(dāng)硬盤(pán)使。

內(nèi)存-硬盤(pán)映射很好很強(qiáng)大,既用了緩存又對(duì)Java應(yīng)用的內(nèi)存使用又沒(méi)有影響。Java應(yīng)用還是Java應(yīng)用,他只知道讀寫(xiě)的還是文件,但是實(shí)際上是內(nèi)存。

這種方式兼得的Java應(yīng)用與緩存兩方面的好處。memcached的廣泛使用也正是這一類(lèi)的代表。

同一機(jī)器部署多個(gè)JVM

這也是一種很好的方式,可以分為縱拆和橫拆??v拆可以理解為把Java應(yīng)用劃分為不同模塊,各個(gè)模塊使用一個(gè)獨(dú)立的Java進(jìn)程。而橫拆則是同樣功能的應(yīng)用部署多個(gè)JVM。

通過(guò)部署多個(gè)JVM,可以把每個(gè)JVM的內(nèi)存控制一個(gè)垃圾回收可以忍受的范圍內(nèi)即可。但是這相當(dāng)于進(jìn)行了分布式的處理,其額外帶來(lái)的復(fù)雜性也是需要評(píng)估的。另外,也有支持分布式的這種JVM可以考慮,不要要錢(qián)哦:)

程序控制的對(duì)象生命周期

這種方式是理想當(dāng)中的方式,目前的虛擬機(jī)還沒(méi)有,純屬假設(shè)。即:考慮由編程方式配置哪些對(duì)象在垃圾收集過(guò)程中可以直接跳過(guò),減少垃圾回收線程遍歷標(biāo)記的時(shí)間。

這種方式相當(dāng)于在編程的時(shí)候告訴虛擬機(jī)某些對(duì)象你可以在*時(shí)間后在進(jìn)行收集或者由代碼標(biāo)識(shí)可以收集了(類(lèi)似C、C++),在這之前你即便去遍歷他也是沒(méi)有效果的,他肯定是還在被引用的。

這種方式如果JVM可以實(shí)現(xiàn),個(gè)人認(rèn)為將是一個(gè)飛躍,Java即有了垃圾回收的優(yōu)勢(shì),又有了C、C++對(duì)內(nèi)存的可控性。

線程分配

Java的阻塞式的線程模型基本上可以拋棄了,目前成熟的NIO框架也比較多了。阻塞式IO帶來(lái)的問(wèn)題是線程數(shù)量的線性增長(zhǎng),而NIO則可以轉(zhuǎn)換成為常數(shù)線程。因此,對(duì)于服務(wù)端的應(yīng)用而言,NIO還是唯一選擇。不過(guò),JDK7中為我們帶來(lái)的AIO是否能讓人眼前一亮呢?我們拭目以待。

其他的JDK

本文說(shuō)的都是Sun的JDK,目前常見(jiàn)的JDK還有JRocket和IBM的JDK。其中JRocket在IO方面比Sun的高很多,不過(guò)Sun JDK6.0以后提高也很大。而且JRocket在垃圾回收方面,也具有優(yōu)勢(shì),其可設(shè)置垃圾回收的最大暫停時(shí)間也是很吸引人的。不過(guò),系統(tǒng)Sun的G1實(shí)現(xiàn)以后,在這方面會(huì)有一個(gè)質(zhì)的飛躍。

原文鏈接:http://pengjiaheng.iteye.com/blog/558619

【編輯推薦】

  1. JVM調(diào)優(yōu)總結(jié):調(diào)優(yōu)方法
  2. JVM調(diào)優(yōu)總結(jié):新一代的垃圾回收算法
  3. JVM調(diào)優(yōu)總結(jié):典型配置舉例
  4. JVM調(diào)優(yōu)總結(jié):分代垃圾回收詳述
  5. JVM調(diào)優(yōu)總結(jié):垃圾回收面臨的問(wèn)題
責(zé)任編輯:林師授 來(lái)源: 和你在一起的博客
相關(guān)推薦

2019-12-20 14:21:26

JVM調(diào)優(yōu)垃圾回收

2012-01-10 14:35:08

JavaJVM

2010-09-25 13:05:07

JVM參數(shù)

2010-09-26 13:48:51

JVM調(diào)優(yōu)

2012-01-10 14:18:40

JavaJVM

2012-01-09 16:02:19

JavaJVM

2012-01-09 16:53:36

JavaJVM

2017-07-21 08:55:13

TomcatJVM容器

2023-11-11 19:07:23

JVMJava

2012-01-09 17:06:16

JavaJVM

2012-01-10 11:19:35

JavaJVM

2021-03-17 11:35:11

JVM代碼Java

2010-09-26 13:39:46

JVM調(diào)優(yōu)

2010-09-26 09:08:17

JVM調(diào)優(yōu)

2021-06-03 08:32:18

JVM調(diào)優(yōu)虛擬機(jī)

2017-09-22 15:15:23

jvm調(diào)優(yōu)命令

2017-10-17 14:02:30

jvm調(diào)優(yōu)工具

2010-03-04 10:56:52

JVM參數(shù)

2010-09-26 10:53:00

JVM內(nèi)存調(diào)優(yōu)設(shè)置

2023-11-10 11:23:20

JVM內(nèi)存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)