Skip to content

Commit 6add26c

Browse files
author
nce40202
committed
feat: 添加 JVM 内存可视化逻辑表格组件
该组件用于展示 JVM 内存管理相关逻辑的状态和配置,支持动态切换逻辑的启用状态,并触发相应的事件通知
1 parent 35d62f7 commit 6add26c

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<template>
2+
<div class="logic-table">
3+
<a-table :data="logicList" :pagination="false">
4+
<template #columns>
5+
<a-table-column title="逻辑名称" data-index="name" :width="200" />
6+
<a-table-column title="描述" data-index="desc" />
7+
<a-table-column title="状态" :width="100">
8+
<template #cell="{ record }">
9+
<template v-if="record.implemented">
10+
<a-switch v-if="record.configurable" v-model="record.enabled"
11+
@change="handleLogicChange(record)">
12+
<template #checked>已启用</template>
13+
<template #unchecked>已禁用</template>
14+
</a-switch>
15+
<span v-else>{{ record.enabled ? '已启用' : '已禁用' }}</span>
16+
</template>
17+
<template v-else>
18+
<span>未实现</span>
19+
</template>
20+
</template>
21+
</a-table-column>
22+
</template>
23+
</a-table>
24+
</div>
25+
</template>
26+
27+
<script setup lang="ts">
28+
import { ref } from 'vue';
29+
30+
interface LogicItem {
31+
id: string;
32+
name: string;
33+
desc: string;
34+
enabled: boolean;
35+
configurable: boolean;
36+
implemented: boolean;
37+
}
38+
39+
const logicList = ref<LogicItem[]>([
40+
{
41+
id: 'eden_sweep',
42+
name: '优先 Eden 分配',
43+
desc: '优先将对象分配到 Eden 区',
44+
enabled: true,
45+
configurable: false,
46+
implemented: true
47+
},
48+
{
49+
id: 'pretenure_size_threshold',
50+
name: '大对象直入老年代',
51+
desc: '当对象大小超过 Eden 区时,直接在老年代分配(可以通过 -XX:PretenureSizeThreshold 参数配置)',
52+
enabled: true,
53+
configurable: false,
54+
implemented: false
55+
},
56+
{
57+
id: 'dynamic_age_threshold',
58+
name: '动态年龄判定',
59+
desc: '当 Survivor 区中相同年龄对象大小总和超过 Survivor 区的一半时,年龄大于等于该年龄的对象直接进入老年代',
60+
enabled: false,
61+
configurable: false,
62+
implemented: false
63+
}
64+
]);
65+
66+
const emit = defineEmits(['logicChange']);
67+
68+
const handleLogicChange = (logic: LogicItem) => {
69+
emit('logicChange', logic);
70+
};
71+
</script>
72+
73+
<style scoped>
74+
.logic-table {
75+
background: white;
76+
}
77+
</style>

src/views/MemoryVisualizer.vue

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
<a-form-item>
1212
<a-button @click="restartJvm" class="restart-button" :loading="isRestarting">重启 JVM</a-button>
1313
</a-form-item>
14+
<a-form-item>
15+
<a-button @click="showLogicTable">内存管理逻辑</a-button>
16+
</a-form-item>
1417
</a-form>
1518

1619
<!-- 对象创建表单 -->
@@ -116,12 +119,18 @@
116119
</template>
117120
</a-table>
118121
</a-modal>
122+
123+
<!-- 内存管理逻辑弹窗 -->
124+
<a-modal v-model:visible="showLogicModal" title="内存管理逻辑" :footer="false" width="1000px">
125+
<LogicTable @logicChange="handleLogicChange" />
126+
</a-modal>
119127
</template>
120128

121129
<script setup lang="ts">
122130
import { ref, computed, onBeforeMount, reactive } from 'vue';
123131
import { Message } from '@arco-design/web-vue';
124132
import MemorySpace from '@/components/jvm-memory-visualizer/MemorySpace.vue';
133+
import LogicTable from '@/components/jvm-memory-visualizer/LogicTable.vue';
125134
import type { HeapObject } from '@/types';
126135
127136
onBeforeMount(() => {
@@ -135,6 +144,11 @@ onBeforeMount(() => {
135144
// 重启状态
136145
const isRestarting = ref(false);
137146
const showHelpModal = ref(false);
147+
const showLogicModal = ref(false);
148+
149+
const showLogicTable = () => {
150+
showLogicModal.value = true;
151+
};
138152
139153
const jvmArgsHelp = [
140154
{
@@ -655,6 +669,10 @@ const toggleGarbageCollectable = (obj: HeapObject) => {
655669
obj.isGarbageCollectable = !obj.isGarbageCollectable;
656670
operationLogs.value.unshift(`切换对象 ${obj.name} 的可回收状态为: ${obj.isGarbageCollectable ? '可回收' : '不可回收'}`);
657671
};
672+
673+
const handleLogicChange = (logic: { id: string; enabled: boolean }) => {
674+
operationLogs.value.unshift(`${logic.enabled ? '启用' : '禁用'}逻辑: ${logic.id}`);
675+
};
658676
</script>
659677

660678
<style scoped>

0 commit comments

Comments
 (0)