From what I know, this is a side-effect of the new lazy loading of build data.
Bad plugins force Jenkins to load all the build data. Because of lazy loading, Jenkins is able to throw away the lazy loaded data (not sure if it is or isn't because I have been too busy with other things to look at the code). So if you have a bad plugin you basically force loading of the data on page request, gc purges after page displayed, lather, rince, repeat.
One way to isolate the issue is to try disabling half the plugins, see if that restores performance vs trying the other half disabled...
A few mixes of disabling half of the plugins, e.g.
1. disable first half, enable second half
2. enable first half, disable second half
3. disable every even plugin, enable every odd
4. enable every even plugin, disable every odd
That should give a reasonably small intersection set. Now you can enable all the plugins not on the intersection set and repeat the process for those on the intersection set until you find all culprets