Actually calculating it based on rectangles and circles is possible, but sounds like a programming contest exercise.
What you probably want to do is to approximate it. This can be done fairly easily using raycasts. Imagine dividing GameObject 0 into a number of squares. Pretty much like projecting a grid on it.
Then if you determine whether each square is free or not you have a pretty good approximation to the actual % of free space. Determining whether a square is free can be done with a simple raycast in the middle of the square. If you hit GameObject 0, it’s free, else it’s not.
Of course the approximation gets better if you make the squares smaller, but the amount of time needed for the raycasts also increments.
An in between approach would be to divide GameObject 0 into lines. Then for each line you determine where the line enters and exits each blocking circle. This is still an approximation, but faster and more precise. You will need to calculate some line circle intersections, but that is relatively easy.
So, for who finds this in the future, there are 3 approaches:
Full calculation
Requires multiple intersections between circles and rectangles
By far the most complicated to implement, a serious challenge
Fastest and 100% accurate
Approximation in strips
Requires line with circle intersections
Fairly easy to implement
Average speed and accuracy
Approximation in squares
Only requires a simple RayCast
Easiest to implement
Slowest and least accurate
I would recommend option 2 if possible with option 3 as a fallback.