First off, do observe that the \resizebox{\textwidth}{...} "wrapper" serves no useful purpose since the width of the command's second argument is equal \textwidth. In fact, the way you set up the wrapper, it is actually slightly counterproductive. Why? Your code is a follows:
\resizebox{\textwidth}{!}{
\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|X|X|X|}
...
\end{tabularx}
}
So what exactly is the problem, you may ask? It's the fact that you didn't terminate the line
\resizebox{\textwidth}{!}{
with a % (comment) symbol. As a result, the total width of the material governed by \resizebox is not just \textwidth but \textwidth plus 1 interword space. The correct way to write the instruction is like this:
\resizebox{\textwidth}{!}{%
However, as argued above, the \resizebox wrapper is superfluous to begin with and should be omitted.
Second, I suggest you continue to use a tabularx environment, but use a narrower width for the "Overhead" column than for the other columns. In the solution below, the four "overhead" columns are 40% narrower than the other four data columns. When setting up varying-width columns of type X, the cardinal rule is that the sum of the relative widths -- 4*1.25+4*0.75 -- must equal the number of columns of type X -- here: 8.
Third, I would try hard to give a the a much more open "look", mainly by omitting all vertical rules and using fewer, but well-spaced, horizontal rules.
Lastly, I'd left-align the first column and center-set all 8 data columns.
Here's the proposed modification and the associated screenshot:

\documentclass{article}
\usepackage[letterpaper,hmargin=1in]{geometry} % set page parameters suitably
\usepackage{tabularx,ragged2e,booktabs}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
% set up a modified, i.e., centered version of the "X" column type:
\newcolumntype{C}[1]{>{\Centering\arraybackslash%
\hsize=#1\hsize\linewidth=\hsize\hspace{0pt}}X}
% determine width and column type of first column:
\newlength\mylen
\settowidth\mylen{enabled Cache (8MB)}
\newcolumntype{M}{>{\RaggedRight}m{\mylen}}
\begin{document}
\begin{table}
\setlength\tabcolsep{3pt} % default: 6pt
\begin{tabularx}{\textwidth}{@{} M *{4}{C{1.25}C{0.75}} @{}}
\toprule
\textbf{Cache Configuration} &
\textbf{Access Latency} (ns) &
\textbf{Overhead} &
\textbf{Dynamic Read Energy} (nJ) &
\textbf{Overhead} &
\textbf{Leakage Power} (mW) &
\textbf{Overhead} &
\textbf{Area} (mm\textsuperscript{2}) &
\textbf{Overhead} \\
\midrule
Conventional Cache (1MB) & 1.3125 & & 0.3295 & & 221.796 & & 3.4085 & \\ \addlinespace
Conventional Cache (8MB) & 2.7504 & & 0.8605 & & 1641.11 & & 18.7754 & \\ \addlinespace
Frequency Table (FT) & 0.4129 & & 0.0008 & & 2.4785 & & 0.0296 & \\ \addlinespace
Precompression Table (PT) & 0.6353 & & 0.0014 & & 4.9366 & & 0.0788 & \\ \addlinespace
Mapping Table (MT) & 0.0927 & & 0.0011 & & 0.3396 & & 0.0032 & \\ \addlinespace
Overflow Mapping Table & 0.3394 & & 0.0020 & & 4.5186 & & 0.038 & \\ \addlinespace
Precompression-enabled Cache (1MB) & 2.2873 & 74\% & 0.4178 & 26\% & 273.539 & 23\% & 3.9191 & 15\% \\ \addlinespace
Precompression-enabled Cache (8MB) & 3.7251 & 35\% & 0.9489 & 10\% & 1692.853 & 3\% & 19.2859 & 5\% \\
\bottomrule
\end{tabularx}
\caption{Access Latency, Energy, Power and Area Overheads of Precompression logic and Precompression-enabled caches.}
\label{table:precompression-overhead}
\end{table}
\end{document}
\documentclass[...]{...}line and all other lines from the preamble that affect the code you're having problems with (so for example here it would be\usepackage{tabularx}, and maybe some more if you loaded extra packages or changed commands that change how your table behaves), that would be optimal. – TivV Jan 29 '20 at 19:19\hspace{0pt}as shown in this question: Table column text exceeds column width – barbara beeton Jan 29 '20 at 19:20