An axis-parallel k-dimensional box is a Cartesian product R-1 x R-2 x (. . .) x R-k where R-i (for 1 <= i <= k) is a closed interval of the form [a(i), b(i)] on the real line. For a graph G, its boxicity box(G) is the minimum dimension k, such that G is representable as the intersection graph of (axis-parallel) boxes in k-dimensional space. The concept of boxicity finds applications in various areas such as ecology, operation research etc. A number of NP-hard problems are either polynomial time solvable or have much better approximation ratio on low boxicity graphs. For example, the max-clique problem is polynomial time solvable on bounded boxicity graphs and the maximum independent set problem has log n approximation ratio for boxicity 2 graphs. In most cases, the first step usually is computing a low dimensional box representation of the given graph. Deciding whether the boxicity of a graph is at most 2 itself is NP-hard. We give an efficient randomized algorithm to construct a box representation of any graph G on n vertices in 1.5(Delta + 2) In n dimensions, where Delta is the maximum degree of G. We also show that box(G) <= (Delta+2) Inn for any graph G. Our bound is tight up to a factor of Inn. The only previously known general upper bound for boxicity was given by Roberts, namely box(G) <= n/2. Our result gives an exponentially better upper bound for bounded degree graphs. We also show that our randomized algorithm can be derandomized to get a polynomial time deterministic algorithm. Though our general upper bound is in terms of maximum degree 6, we show that for almost all graphs on n vertices, its boxicity is upper bound by c (.) (d(av) + 1) In n where day is the average degree and c is a small constant. Also, we show that for any graph G, box(G) <= root 8nd(av) ln n, which is tight up to a factor of b root ln n for a constant b.