One should default to BenchmarkTools.jl for timing. I have found that @time, tic(), toc() can, for whatever reason, be quite inaccurate, especially for small (\lesssim 10\mu s) intervals, and, more importantly, it includes compile time.
I’m not sure exactly how it works (I would assume it somehow explicitly forces the code to be compiled before it is run at all), but yes, it does not include compile time. A few casual experiments with @benchmark should confirm this to your satisfaction.
Also note that the package does not magically solve all issues with benchmarks. Replacing the @time in the code above with @benchmark or @btime will not give the correct benchmark result. It’ll still include global access time. For these usage, see the doc https://github.com/JuliaCI/BenchmarkTools.jl/blob/master/doc/manual.md#introduction