Global Vue component in plugin causes memory leak?

I’m using a Popup style UI component in a Nuxt.js base project. This is used by many pages and routes, so I declared and initiated as global component plugin when the app starts, like below:

// nuxt.config.js
plugins: [
    { src: '~/plugins/popup/index.js', mode: 'client' },
],

// plugins/toast/index.js
import Vue from 'vue';
import PopupComponent from './Popup.vue';

const PopupConstructor = Vue.extend(PopupComponent);

export default () => {
    Vue.use({
        install: () => {
            let _popup = new PopupConstructor();

            window.popup = Vue.prototype.popup = {
                appear: _popup.appear,
                disappear: _popup.disappear
            };

            _popup.vm = _popup.$mount();
            _popup.dom = _popup.vm.$el;
            document.body.appendChild(_popup.dom);
        }
    });
};

As you see, by this code the Popup vue component’s methods(appear, disappear) will be accessible through window.popup, and the component itself will be created, mounted, attached on document.

This works just fine, but the problem is it seems this leads to memory leak. As I profile the memory allocation timeline using Chrome devtool, from some point of time memory allocated with window causes retained(dangling?; could be GC-ed but left due to reference using?) memory.

Is the usage of plugin like above okay? If not, to get the same utility while preventing memory leak, which part should be corrected?

How do you instantiate the plugin? Also, how are you using the popup in your App?