Code review comment: Based on the known information, it seems that using a time-based gc is already effectively controlling memory usage. Directly limiting memory usage to a maximum of only 5% would introduce other variables and compromise stability. It is recommended to maintain consistency with previous behavior for now.

Code under review:
public void getBinlogInfo(Database db, BaseProcResult result) {
        BinlogConfig binlogConfig = binlogConfigCache.getTableBinlogConfig(dbId, tableId);

        String tableName = null;
        String dropped = null;
        if (db == null) {
            tableName = "(dropped).(unknown)";
            dropped = "true";
        } else {
            String dbName = db.getFullName();
            Table table = db.getTableNullable(tableId);
            if (table == null) {
                dropped = "true";
                tableName = dbName + ".(dropped)";
            }

            dropped = "false";
            if (table instanceof OlapTable) {
                OlapTable olapTable = (OlapTable) table;
                tableName = dbName + "." + olapTable.getName();
            } else {
                tableName = dbName + ".(not_olaptable)";
            }
        }

        lock.readLock().lock();
        try {
            List<String> info = new ArrayList<>();

            info.add(tableName);
            String type = "table";
            info.add(type);

            String id = String.valueOf(tableId);
            info.add(id);
            info.add(dropped);
            String binlogLength = String.valueOf(binlogs.size());
            info.add(binlogLength);
            String binlogSize = String.valueOf(this.binlogSize);
            info.add(binlogSize);
            String firstBinlogCommittedTime = null;
            String readableFirstBinlogCommittedTime = null;
            for (TBinlog binlog : binlogs) {
                long timestamp = binlog.getTimestamp();
                if (timestamp != -1) {
                    firstBinlogCommittedTime = String.valueOf(timestamp);
                    readableFirstBinlogCommittedTime = BinlogUtils.convertTimeToReadable(timestamp);
                    break;
                }
            }
            info.add(firstBinlogCommittedTime);
            info.add(readableFirstBinlogCommittedTime);
            String lastBinlogCommittedTime = null;
            String readableLastBinlogCommittedTime = null;
            Iterator<TBinlog> iterator = binlogs.descendingIterator();
            while (iterator.hasNext()) {
                TBinlog binlog = iterator.next();
                long timestamp = binlog.getTimestamp();
                if (timestamp != -1) {
                    lastBinlogCommittedTime = String.valueOf(timestamp);
                    readableLastBinlogCommittedTime = BinlogUtils.convertTimeToReadable(timestamp);
                    break;
                }
            }
            info.add(lastBinlogCommittedTime);
            info.add(readableLastBinlogCommittedTime);
            String binlogTtlSeconds = null;
            String binlogMaxBytes = null;
            String binlogMaxHistoryNums = null;
            if (binlogConfig != null) {
                binlogTtlSeconds = String.valueOf(binlogConfig.getTtlSeconds());
                binlogMaxBytes = String.valueOf(binlogConfig.getMaxBytes());
                binlogMaxHistoryNums = String.valueOf(binlogConfig.getMaxHistoryNums());
            }
            info.add(binlogTtlSeconds);
            info.add(binlogMaxBytes);
            info.add(binlogMaxHistoryNums);

            result.addRow(info);
        } finally {
            lock.readLock().unlock();
        }
    }

Line commented on: binlogMaxBytes = String.valueOf(binlogConfig.getMaxBytes());

Revised code:
public void getBinlogInfo(Database db, BaseProcResult result) {
        BinlogConfig binlogConfig = binlogConfigCache.getTableBinlogConfig(dbId, tableId);

        String tableName = null;
        String dropped = null;
        if (db == null) {
            tableName = "(dropped).(unknown)";
            dropped = "true";
        } else {
            String dbName = db.getFullName();
            Table table = db.getTableNullable(tableId);
            if (table == null) {
                dropped = "true";
                tableName = dbName + ".(dropped)";
            }

            dropped = "false";
            if (table instanceof OlapTable) {
                OlapTable olapTable = (OlapTable) table;
                tableName = dbName + "." + olapTable.getName();
            } else {
                tableName = dbName + ".(not_olaptable)";
            }
        }

        lock.readLock().lock();
        try {
            List<String> info = new ArrayList<>();

            info.add(tableName);
            String type = "table";
            info.add(type);

            String id = String.valueOf(tableId);
            info.add(id);
            info.add(dropped);
            String binlogLength = String.valueOf(binlogs.size());
            info.add(binlogLength);
            String binlogSize = String.valueOf(this.binlogSize);
            info.add(binlogSize);
            String firstBinlogCommittedTime = null;
            String readableFirstBinlogCommittedTime = null;
            for (TBinlog binlog : binlogs) {
                long timestamp = binlog.getTimestamp();
                if (timestamp != -1) {
                    firstBinlogCommittedTime = String.valueOf(timestamp);
                    readableFirstBinlogCommittedTime = BinlogUtils.convertTimeToReadable(timestamp);
                    break;
                }
            }
            info.add(firstBinlogCommittedTime);
            info.add(readableFirstBinlogCommittedTime);
            String lastBinlogCommittedTime = null;
            String readableLastBinlogCommittedTime = null;
            Iterator<TBinlog> iterator = binlogs.descendingIterator();
            while (iterator.hasNext()) {
                TBinlog binlog = iterator.next();
                long timestamp = binlog.getTimestamp();
                if (timestamp != -1) {
                    lastBinlogCommittedTime = String.valueOf(timestamp);
                    readableLastBinlogCommittedTime = BinlogUtils.convertTimeToReadable(timestamp);
                    break;
                }
            }
            info.add(lastBinlogCommittedTime);
            info.add(readableLastBinlogCommittedTime);
            String binlogTtlSeconds = null;
            String binlogMaxBytes = null;
            String binlogMaxHistoryNums = null;
            if (binlogConfig != null) {
                binlogTtlSeconds = String.valueOf(binlogConfig.getTtlSeconds());
                binlogMaxBytes = String.valueOf(binlogConfig.getMaxBytes());
                binlogMaxHistoryNums = String.valueOf(binlogConfig.getMaxHistoryNums());
            }
            info.add(binlogTtlSeconds);
            info.add(binlogMaxBytes);
            info.add(binlogMaxHistoryNums);

            result.addRow(info);
        } finally {
            lock.readLock().unlock();
        }
    }