Duke has won a record 16 straight ACC tournament games, and is seeking to become the first team to win six straight championships. The Blue Devils haven't dropped a tourney game since an 83-68 loss to North Carolina in the 1998 final.
Freshman J.R. Reynolds scored 20 points to lead the Cavaliers (17-12), who have lost 19 of 21 to Duke dating to the 1995-96 season.
Duke shot 50 percent and scored 26 points off 18 turnovers, but had a hard time putting away the No. 8 seed. Virginia hung around much of the way, going 20-for-25 at the line to stay in it.
The Blue Devils led by as many as 14 points early in the second half but needed Williams' effort to hold on.
Williams used his 6-foot-9 frame to give the Blue Devils a physical presence in the second half, scoring 18 points after the break.
With Virginia trailing 60-54 with 8:20 left, Williams scored on five of Duke's next seven possessions. He tipped in a miss by Sean Dockery to push the lead back to eight, and answered Devin Smith's driving score with two free throws on the next possession.
He also made a layup against traffic, hit two free throws and scored on a putback of a miss by Ewing for a 73-64 lead with 4:40 left.
The Blue Devils went 21-for-24 from the line in the second half, with Williams going 10-for-11 after halftime.