Swapping in and out logic on a running system-Collection of common programming errors

I want to design this system which has two major components:

  1. Base/core stuff. Never changes.
  2. Stuff running on the core. Changes rather frequently.

This is going to be developed in Java, but the problem applies to any classical OO language. How can I replace 2 above in a running system without recompiling 1, and without even stopping 1 when it’s running. It’s ok to recompile 2, but I shouldn’t be disturbing 1.

Is there any design-pattern to do this? I would think this is somewhat similar to plugin behavior, but 2 is actually critical to the working of the application, not just an add-on.