The call to Statistics.var creates a dense quadratic matrix, so with n = 1_000 there are 500,500 terms in your objective function.
Do instead:
julia> using JuMP, Statistics
julia> function main(n)
model = Model()
@variable(model, x[1:n], Bin)
@objective(model, Min, var(x .* rand(n)))
return model
end
main (generic function with 1 method)
julia> function my_main(n)
model = Model()
@variable(model, x[1:n], Bin)
@variable(model, μ)
@expression(model, y, x .* rand(n))
@constraint(model, μ == sum(y) / n)
@objective(model, Min, sum((yi - μ)^2 for yi in y))
return model
end
my_main (generic function with 1 method)
julia> @time main(200);
1.320286 seconds (16.76 k allocations: 598.565 MiB, 4.88% gc time)
julia> @time my_main(200);
0.000551 seconds (7.21 k allocations: 765.625 KiB)