面試某公司的時(shí)候,面試官問到,導(dǎo)致瀏覽器崩潰的原因有哪些?愚輩不才, 僅回答出了內(nèi)存泄漏。其實(shí)在網(wǎng)頁在裝載的過程中,常常由于種種原因使瀏覽器 的反映變的很慢,或造成瀏覽器失去響應(yīng),甚至?xí)䦟?dǎo)致機(jī)器無法進(jìn)行其他的操作 。 對于訪客,如果登錄您網(wǎng)站,瀏覽器就立刻崩潰,我想這對誰都是無法容忍的 ,對此總結(jié)了網(wǎng)站導(dǎo)致瀏覽器崩潰的原因: 1. 內(nèi)存泄漏 還是先談下內(nèi)存泄漏,網(wǎng)站由于內(nèi)存泄漏的而照成崩潰有兩種情況,服務(wù)器的 崩潰和瀏覽器的崩潰。內(nèi)存泄漏所造成的問題是顯而易見的,它使得已分配的內(nèi) 存的引用就會丟失,只要系統(tǒng)還在運(yùn)行中,則進(jìn)程就會一直使用該內(nèi)存。這樣的 結(jié)果是,曾占用更多的內(nèi)存的程序會降低系統(tǒng)性能,直到機(jī)器完全停止工作,才 會完全清空內(nèi)存。 Apache的Web服務(wù)器是用C/C++編寫的,C/C++的內(nèi)存泄漏問題不必多說,系統(tǒng) 中存在無法回收的內(nèi)存,有時(shí)候會造成內(nèi)存不足或系統(tǒng)崩潰。在Java中,內(nèi)存泄 漏就是存在一些被分配的可達(dá)而無用的對象,這些對象不會被GC所回收,然而它 卻占用內(nèi)存。 而在客戶端,JavaScript所造成的內(nèi)存泄漏,也將可能使得瀏覽器崩潰。關(guān)于 JavaScript的內(nèi)存泄漏的文章,較權(quán)威的有《Memory leak patterns in JavaScript》和《Understanding and Solving Internet Explorer Leak Patterns》。 JavaScript 是一種垃圾收集式(garbage collector,GC)語言,這就是說, 內(nèi)存是根據(jù)對象的創(chuàng)建分配給該對象的,并會在沒有對該對象的引用時(shí)由瀏覽器 收回。再根據(jù)《Fabulous Adventures In Coding》一文的說法:“JScript uses a nongenerational mark-and-sweep garbage collector.”,對” nongenerational mark-and-sweep”的可以這樣理解,瀏覽器處理JavaScript并 非采用純粹的垃圾收集,還使用引用計(jì)數(shù)來為Native對象(例如 Dom、ActiveX Object)處理內(nèi)存。 在引用計(jì)數(shù)系統(tǒng),每個(gè)所引用的對象都會保留一個(gè)計(jì)數(shù),以獲悉有多少對象正 在引用它。如果計(jì)數(shù)為零,該對象就會被銷毀,其占用的內(nèi)存也會返回給堆。 當(dāng) 對象相互引用時(shí),就構(gòu)成循環(huán)引用,瀏覽器(IE6,F(xiàn)irefox2.0)對于純粹的 JavaScript對象間的循環(huán)引用是可以正確處理的,但由于在引用計(jì)數(shù)系統(tǒng),相互 引用的對象都不能被銷毀,因?yàn)槭且糜?jì)數(shù)永遠(yuǎn)不能為零,因此瀏覽器無法處理 JavaScript與Native對象(例如Dom、 ActiveX Object)之間循環(huán)引用。所以,當(dāng) 我們出現(xiàn)Native對象與JavaScript對象間的循環(huán)引用時(shí),就會出現(xiàn)內(nèi)存泄漏的問 題。 |
2015年全國職稱計(jì)算機(jī)考試教材(2007模 .. 定價(jià):¥225 優(yōu)惠價(jià):¥213 更多書籍 | |
全國職稱計(jì)算機(jī)考試速成過關(guān)系列套裝:W .. 定價(jià):¥133 優(yōu)惠價(jià):¥133.0 更多書籍 |