原创 V8 之旅:FULL COMPILER

注:本文轉自liuyanghejerry的V8 之旅:FULL COMPILER 在過去的五年中,JavaScript的性能有了極大的提升,這主要歸功於JavaScript虛擬機的執行機制由解釋演變爲了JIT。現在,JavaScri

原创 V8 之旅:對象表示

注:本文轉自liuyanghejerry的V8 之旅:對象表示 在前一篇文章中,我們觀察了V8的簡單編譯器——Full Compiler。在我們繼續觀察Crankshaft之前,爲更好地理解它,我們首先來看看V8在內存中如何表達對

原创 排序算法-選擇、插入、冒泡算法

說明:選擇排序(Selection sort)、插入排序(Insertion sort)與冒泡排序(Bubble sort)這三個排序方式是初學排序所必須知道的三個基本排序方式, 它們由於速度不快而不實用(平均與最快的時間複雜度都是O(n

原创 排序算法-基數排序

說明      在之前所介紹過的排序方法,都是屬於「比較性」的排序法,也就是每次排序時,都是比較整個鍵值的大小以進行排序。這裏所要介紹的「基數排序法」(radix sort)則是屬於「分配式排序」(distribution sort),

原创 V8 之旅: 垃圾回收器

注:本文轉自liuyanghejerry的V8 之旅: 垃圾回收器 在之前的幾篇文章當中,我們深入了V8引擎的實現,討論了Full Compiler、Crankshaft以及對象的內部表達。在這篇文章當中,我們來看看V8的 垃圾

原创 排序算法-快速排序(三種實現方案)

一、快速排序算法(一) 說明       快速排序法(quick sort)是目前所公認最快的排序方法之一(視解題的對象而定),雖然快速排序法在最差狀況下可以達O(n2),但是在多數的情況下,快速排序法的效率表現是相當不錯的。      

原创 V8 之旅:優化編譯器 CRANKSHAFT

本文轉自liuyanghejerry的V8 之旅:優化編譯器 CRANKSHAFT 在之前的兩篇文章中,我們討論了V8的Full Compiler和對象的內部表示。在幾年前,FC生成的原生代碼相對於JavaScript來說已經不錯

原创 排序算法-shaker-改良的冒泡排序算法

說明       請看看之前介紹過的冒泡排序法: void bubsort(int number[]) { int i,j,k,flag=1; for(i=0;i<MAX-1 && flag==1;++i) { flag = 0

原创 排序算法-合併排序

說明       之前所介紹的排序法都是在同一個陣列中的排序,考慮今日有兩筆或兩筆以上的資料,它可能是不同陣列中的資料,或是不同檔案中的資料,如何爲它們進行排序? 解法       可以使用合併排序法,合併排序法基本是將兩筆已排序的資料合

原创 排序算法-shell排序-改良的插入排序

說明    插入排序法由未排序的後半部前端取出一個值,插入已排序前半部的適當位置,概念簡單但速度不快。排序要加快的基本原則之一,是讓後一次的排序進行時,儘量利用前一次排序後的結果,以加快排序的速度,Shell排序法即是基於此一概念來改良插

原创 排序算法-heap排序-改良的交換排序算法

說明       選擇排序法的概念簡單,每次從未排序部份選一最小值,插入已排序部份的後端,其時間主要花費於在整個未排序部份尋找最小值,如果能讓搜尋最小值的方式加快,選擇排序法的速率也就可以加快,Heap排序法讓搜尋的路徑由樹根至最後一個樹