An early Conor McAleny double and Josh Ruffels' second-half header did the damage and lifted the U's to ninth.
Despite early pressure from the hosts, the U's took the lead after five minutes when McAleny fired in from the edge of the box.
The winger, on loan from Everton, then doubled the lead, cutting in from the left and curling into the far corner.
Neither side could muster another shot on target during a frustrating first half for the hosts.
Steve Morison was put clean through on the hour mark but fired straight at Simon Eastwood, and Oxford sealed victory when Ruffels nodded in Chris Maguire's 70th-minute corner at the far post.
Millwall are one point above seventh-placed Southend.
Match report supplied by the Press Association.
Match ends, Millwall 0, Oxford United 3.
Second Half ends, Millwall 0, Oxford United 3.
Attempt missed. Lee Gregory (Millwall) right footed shot from the left side of the box is close, but misses to the right.
Attempt missed. Ben Thompson (Millwall) right footed shot from outside the box is close, but misses to the left.
Substitution, Oxford United. Robert Hall replaces Marvin Johnson.
Substitution, Oxford United. Kane Hemmings replaces Chris Maguire.
Attempt missed. Steve Morison (Millwall) header from a difficult angle on the right is close, but misses to the right.
Delay over. They are ready to continue.
Substitution, Millwall. David Worrall replaces Aiden O'Brien.
Substitution, Oxford United. Joe Rothwell replaces Canice Carroll because of an injury.
Delay in match Canice Carroll (Oxford United) because of an injury.
Attempt missed. Steve Morison (Millwall) right footed shot from outside the box misses to the right.
Goal!  Millwall 0, Oxford United 3. Josh Ruffels (Oxford United) header from the right side of the six yard box to the bottom right corner. Assisted by Chris Maguire with a cross following a corner.
Corner,  Oxford United. Conceded by Shaun Williams.
Foul by Byron Webster (Millwall).
Marvin Johnson (Oxford United) wins a free kick in the defensive half.
Corner,  Millwall. Conceded by Joe Skarz.
Foul by Jed Wallace (Millwall).
Curtis Nelson (Oxford United) wins a free kick in the defensive half.
Steve Morison (Millwall) wins a free kick in the attacking half.
Foul by Curtis Nelson (Oxford United).
Corner,  Millwall. Conceded by Joe Skarz.
Corner,  Oxford United. Conceded by Jordan Archer.
Attempt saved. Marvin Johnson (Oxford United) left footed shot from outside the box is saved in the bottom right corner.
Foul by Ben Thompson (Millwall).
Conor McAleny (Oxford United) wins a free kick in the attacking half.
Attempt saved. Aiden O'Brien (Millwall) left footed shot from the centre of the box is saved in the centre of the goal.
Foul by Aiden O'Brien (Millwall).
Marvin Johnson (Oxford United) wins a free kick in the attacking half.
Jed Wallace (Millwall) wins a free kick in the defensive half.
Foul by Charlie Raglan (Oxford United).
Ben Thompson (Millwall) wins a free kick on the right wing.
Foul by Marvin Johnson (Oxford United).
Jake Cooper (Millwall) wins a free kick in the attacking half.
Foul by Marvin Johnson (Oxford United).
Attempt missed. Jed Wallace (Millwall) right footed shot from outside the box misses to the right.
Foul by Mahlon Romeo (Millwall).
Conor McAleny (Oxford United) wins a free kick in the defensive half.
Attempt saved. Conor McAleny (Oxford United) right footed shot from the left side of the box is saved in the bottom right corner.
Foul by Aiden O'Brien (Millwall).
Millwall slipped to a disappointing defeat at home to Oxford but remain in the League One play-off places.