内存的分配与回收

一、        实验目的

用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。

二、        实验内容和要求

采用连续分配方式之动态分区分配存储管理,使用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法4种算法完成设计(任选两种算法)。

(1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区说明表进行。

(2)或在程序运行过程,由用户指定申请与释放。

(3)设计一个空闲区说明表,以保存某时刻主存空间占用情况。把空闲区说明表的变化情况以及各作业的申请、释放情况显示。

三、        实验方法、步骤及结果测试

  1. 1.      原理分析及流程图

        程序名:best.rar

  1. 2.      步骤:

  创建项目:best

  创建包:best

  创建类:bestFit.java 、firstFit.java、 MainFrame.java

  编写代码

  1. 3.      主要程序段及其解释

    

package best;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import java.awt.Font;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.border.EtchedBorder;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import javax.swing.JLabel;

import java.awt.Color;

import javax.swing.SwingConstants;

import javax.swing.JTextField;

public class bestFit extends JFrame {

    private JPanel contentPane;

    private JTextField everySize;

    private JTextField workname;

    private JTextField count;

    private JFrame frame;

    private JTextField location;

    /**

     * Launch the application.

     */

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            public void run() {

                try {

                    bestFit frame = new bestFit();

                    frame.setVisible(true);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        });

    }

    /** * Create the frame. */

    class pointer

    {

        public int prepointer;

        public int nextpoint;

        public int length;

        public int signal;

        pointer()

        {

            prepointer=0;

            nextpoint=0;

            length=0;

            signal=0;

        }

    }

    public bestFit() {

        setTitle("");

        setResizable(false);

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setBounds(300, 200, 559, 447);

        contentPane = new JPanel();

        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(contentPane);

        contentPane.setLayout(null);

        JPanel panel = new JPanel();

        panel.setLayout(null);

        panel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, Color.DARK_GRAY, Color.PINK));

        panel.setBounds(10, 10, 324, 399);

        contentPane.add(panel);

        JLabel label = new JLabel("模拟内存");

        label.setHorizontalAlignment(SwingConstants.CENTER);

        label.setForeground(Color.GRAY);

        label.setFont(new Font("微软雅黑", Font.BOLD, 18));

        label.setBounds(64, 0, 118, 36);

        panel.add(label);

        JPanel panel_1 = new JPanel();

        panel_1.setLayout(null);

        panel_1.setBorder(new EtchedBorder(EtchedBorder.LOWERED, Color.BLACK, Color.DARK_GRAY));

        panel_1.setBounds(99, 50, 176, 312);

        panel.add(panel_1);

        JPanel one = new JPanel();

        one.setLayout(null);

        one.setBorder(new EtchedBorder(EtchedBorder.RAISED, Color.BLACK, null));

        one.setBounds(0, 0, 176, 54);

        panel_1.add(one);

        JPanel two = new JPanel();

        two.setLayout(null);

        two.setBorder(new EtchedBorder(EtchedBorder.RAISED, new Color(0, 0, 0), null));

        two.setBounds(0, 54, 176, 104);

        panel_1.add(two);

        JPanel three = new JPanel();

        three.setLayout(null);

        three.setBorder(new EtchedBorder(EtchedBorder.RAISED, Color.BLACK, null));

        three.setBounds(0, 158, 176, 154);

        panel_1.add(three);

        JLabel label_1 = new JLabel("50KB");

    label_1.setHorizontalAlignment(SwingConstants.CENTER);

        label_1.setFont(new Font("微软雅黑", Font.BOLD, 14));

        label_1.setBounds(270, 68, 54, 19);

        panel.add(label_1);

        JLabel label_2 = new JLabel("100KB");

    label_2.setHorizontalAlignment(SwingConstants.CENTER);

        label_2.setFont(new Font("微软雅黑", Font.BOLD, 14));

        label_2.setBounds(270, 144, 54, 19);

        panel.add(label_2);

        JLabel label_3 = new JLabel("150KB");

    label_3.setHorizontalAlignment(SwingConstants.CENTER);

        label_3.setFont(new Font("微软雅黑", Font.BOLD, 14));

        label_3.setBounds(270, 292, 54, 19);

        panel.add(label_3);

        JPanel panel_5 = new JPanel();

        panel_5.setLayout(null);

        panel_5.setBorder(new EtchedBorder(EtchedBorder.LOWERED, Color.DARK_GRAY, Color.PINK));

        panel_5.setBounds(344, 10, 199, 399);

        contentPane.add(panel_5);

        JButton back = new JButton("回收进程");

        back.setFont(new Font("微软雅黑", Font.BOLD, 15));

        back.setBounds(49, 316, 132, 34);

        panel_5.add(back);

        JLabel label_4 = new JLabel("进程大小");

        label_4.setOpaque(true);

    label_4.setHorizontalAlignment(SwingConstants.CENTER);

        label_4.setForeground(Color.GRAY);

        label_4.setFont(new Font("微软雅黑", Font.BOLD, 15));

        label_4.setBounds(15, 119, 65, 27);

        panel_5.add(label_4);

        everySize = new JTextField();

    everySize.setHorizontalAlignment(SwingConstants.CENTER);

        everySize.setFont(new Font("微软雅黑", Font.BOLD, 15));

        everySize.setColumns(10);

        everySize.setBounds(91, 121, 65, 21);

        panel_5.add(everySize);

        JLabel label_5 = new JLabel("进程名");

        label_5.setOpaque(true);

    label_5.setHorizontalAlignment(SwingConstants.CENTER);

        label_5.setForeground(Color.GRAY);

        label_5.setFont(new Font("微软雅黑", Font.BOLD, 15));

        label_5.setBounds(15, 64, 65, 27);

        panel_5.add(label_5);

        workname = new JTextField();

        workname.setHorizontalAlignment(SwingConstants.CENTER);

        workname.setFont(new Font("微软雅黑", Font.BOLD, 15));

        workname.setColumns(10);

        workname.setBounds(91, 66, 65, 21);

        panel_5.add(workname);

        JLabel label_6 = new JLabel("KB");

    label_6.setHorizontalAlignment(SwingConstants.CENTER);

        label_6.setForeground(Color.GRAY);

        label_6.setFont(new Font("微软雅黑", Font.BOLD, 15));

        label_6.setBounds(155, 122, 26, 21);

        panel_5.add(label_6);

        JButton startbutton = new JButton("开始分配");

        startbutton.setFont(new Font("微软雅黑", Font.BOLD, 15));

        startbutton.setBounds(49, 178, 132, 34);

        panel_5.add(startbutton);

        JButton restartbutton = new JButton("重新开始");

        restartbutton.setFont(new Font("微软雅黑", Font.BOLD, 15));

        restartbutton.setBounds(49, 245, 132, 34);

        panel_5.add(restartbutton);

        count = new JTextField();

        count.setText("0");

        count.setEnabled(false);

        count.setEditable(false);

        count.setColumns(10);

        count.setBounds(72, 253, 19, 15);

        panel_5.add(count);

        count.setVisible(false);

        location = new JTextField();

        location.setEditable(false);

        location.setEnabled(false);

        location.setText("0");

        location.setBounds(72, 324, 66, 21);

        panel_5.add(location);

        location.setColumns(10);

        location.setVisible(false);

        final JLabel name[]=new JLabel[20];

        for(int i=0;i<20;i++)

        {

            name[i]=new JLabel();

            name[i].setFont(new Font("微软雅黑",Font.BOLD,12));

    name[i].setHorizontalAlignment(SwingConstants.CENTER);

            panel.add(name[i]);

        }

        final JLabel blocks[]=new JLabel[300];

        for(int i=0;i<50;i++)

        {

            blocks[i] = new JLabel("");

            blocks[i].setOpaque(false);

            one.add(blocks[i]);

        }

        for(int i=50;i<150;i++)

        {

            blocks[i] = new JLabel("");

            blocks[i].setOpaque(false);

            two.add(blocks[i]);

        }

        for(int i=150;i<300;i++)

        {

            blocks[i] = new JLabel("");

            blocks[i].setOpaque(false);

            three.add(blocks[i]);

        }

        //设置前指针和后指针,以及空闲区的初始长度

        final pointer pt[]=new pointer[3];

        for(int i=0;i<3;i++)

        {

            pt[i]=new pointer();

        }

        pt[0].prepointer=0;

        pt[0].nextpoint=50;

        pt[0].length=50;

        pt[0].signal=0;

        pt[1].prepointer=50;

        pt[1].nextpoint=150;

        pt[1].length=100;

        pt[1].signal=0;

        pt[2].prepointer=150;

        pt[2].nextpoint=300;

        pt[2].length=150;

        pt[2].signal=0;

        startbutton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                String str=everySize.getText();

                int size=Integer.parseInt(str);

                String str1=count.getText();

                int num=Integer.parseInt(str1);

                String str2=workname.getText();



                int i;            

                for(i=0;i<3;i++)

                {

                    if(pt[i].length>size)

                    {

                        break;

                    }

                }

                if(i==3)

                {

                    JOptionPane.showMessageDialog(frame, "没有合适的空闲分区!", null, JOptionPane.WARNING_MESSAGE);

                }

                    else

                    {

                        int sig=min(pt[0].length,pt[1].length,pt[2].length,size);

                        for(int j=0;j<size;j++)            

                        {

                            if(pt[sig].prepointer<50)

                            {

blocks[j+pt[sig].prepointer].setBounds(2, j+2+pt[sig].prepointer, 172, 1);

blocks[j+pt[sig].prepointer].setBackground(new Color(250,0,0));                    blocks[j+pt[sig].prepointer].setOpaque(true);

    }                            if(pt[sig].prepointer<150&&pt[sig].prepointer>=50)                            {

                blocks[j+pt[sig].prepointer].setBounds(2, j+2+pt[sig].prepointer-50, 172, 1);

                    blocks[j+pt[sig].prepointer].setBackground(new Color(0,250,0));                                blocks[j+pt[sig].prepointer].setOpaque(true);        

                            }

            if(pt[sig].prepointer<300&&pt[sig].prepointer>=150)

                            {                                blocks[j+pt[sig].prepointer].setBounds(2, j+2+pt[sig].prepointer-150, 172, 1);

    blocks[j+pt[sig].prepointer].setBackground(new Color(0,0,250));                                blocks[j+pt[sig].prepointer].setOpaque(true);

                    }                                                

                }                    pt[sig].prepointer=pt[sig].prepointer+size;

        pt[sig].length=pt[sig].length-size;               

       name[num].setText(str2+" "+size+"KB");

name[num].setBounds(10, pt[sig].prepointer+50-size, 79, 15);

                        num++;

                        count.setText(num+"");

                    }                    

            }

        });

        restartbutton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                pt[0].prepointer=0;

                pt[0].nextpoint=50;

                pt[0].length=50;

                pt[0].signal=0;

                pt[1].prepointer=50;

                pt[1].nextpoint=150;

                pt[1].length=100;

                pt[1].signal=0;

                pt[2].prepointer=150;

                pt[2].nextpoint=300;

                pt[2].length=150;

                pt[2].signal=0;

                for(int i=0;i<300;i++)

                {

                    blocks[i].setOpaque(false);

                    blocks[i].setBackground(new Color(240,240,240));

                }

                everySize.setText("");

                for(int i=0;i<20;i++)

                {

                    name[i].setText("");

                }

                workname.setText("");

            }

        });

        back.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                String str2=workname.getText();

                System.out.println(str2);

                if(str2.equals("1")==true){

                    System.out.println("haha");

                    pt[0].prepointer=0;

                    pt[0].nextpoint=50;

                    pt[0].length=50;

                    pt[0].signal=0; 

                    for(int i=0;i<50;i++)

                    {

                        blocks[i].setOpaque(false);

                        blocks[i].setBackground(new Color(240,240,240));

                    }

                    name[0].setText("");

                }

                if(str2.equals("3")==true){

                    System.out.println("haha");

                    pt[2].prepointer=150;

                    pt[2].nextpoint=300;

                    pt[2].length=150;

                    pt[2].signal=0;

                    for(int i=150;i<300;i++)

                    {

                        blocks[i].setOpaque(false);

                        blocks[i].setBackground(new Color(240,240,240));

                    }

                    name[2].setText("");

                }

                if(str2.equals("2")==true){

                    System.out.println("haha");

                    pt[1].prepointer=50;

                    pt[1].nextpoint=150;

                    pt[1].length=100;

                    pt[1].signal=0;

                    for(int i=50;i<150;i++)

                    {

                        blocks[i].setOpaque(false);

                        blocks[i].setBackground(new Color(240,240,240));

                    }

                    name[1].setText("");

                }

            }

        });

    }

    int min(int a,int b,int c,int d)

    {

        int n1=a-d;

        int n2=b-d;

        int n3=c-d;

        if(n1<0)

        {

            if(n2<0)

            {

                return 2;

            }

            else

            {

                if(n3<0)

                {

                    return 3;

                }

                else

                {

                    if(n2<=n3)

                    {

                        return 1;

                    }

                    else

                    {

                        return 2;

                    }

                }

            }

        }

        else

        {

            if(n2<0)

            {

                if(n3<0)

                {

                    return 0;

                }

                else

                {

                    if(n1<=n3)

                    {

                        return 0;

                    }

                    else

                    {

                        return 2;

                    }

                }

            }

            else

            {

                if(n3<0)

                {

                    if(n1<=n2)

                    {

                        return 0;

                    }

                    else

                    {

                        return 1;

                    }

                }

                else

                {

                    if(n1<=n2)

                    {

                        if(n1<=n3)

                        {

                            return 0;

                        }

                        else

                        {

                            return 2;

                        }

                    }

                    else

                    {

                        if(n2<=n3)

                        {

                            return 1;

                        }

                        else

                        {

                            return 0;

                        }

                    }

                }

            }

        }

    }

}

//首次适应算法

package best;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import java.awt.Graphics;

import java.awt.Graphics2D;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JButton;

import java.awt.Font;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import javax.swing.JLabel;

import javax.swing.SwingConstants;

import java.awt.Color;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

import javax.swing.UIManager;

import javax.swing.ImageIcon;

import java.awt.event.ContainerAdapter;

import java.awt.event.ContainerEvent;

import javax.swing.border.EtchedBorder;

class pointer

{

    public int prepointer;

    public int nextpoint;

    public int length;

    public int signal;

    pointer()

    {

        prepointer=0;

        nextpoint=0;

        length=0;

        signal=0;

    }

}

public class firstFit extends JFrame {

    private JPanel contentPane;

    private JTextField everySize;

    private JFrame frame;

    private JTextField workname;

    private JTextField count;

    /**

     * Launch the application.

     */

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            public void run() {

                try {

                    firstFit frame = new firstFit();

                    frame.setVisible(true);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        });

    }

    /**

     * Create the frame.

     */

    public firstFit() {

        setResizable(false);

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setBounds(300, 200, 559, 447);

        contentPane = new JPanel();

        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(contentPane);

        contentPane.setLayout(null);

        JPanel panel = new JPanel();

        panel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, Color.DARK_GRAY, Color.PINK));

        panel.setBounds(344, 10, 199, 399);

        contentPane.add(panel);

        panel.setLayout(null);

        JLabel label = new JLabel("进程大小");

        label.setHorizontalAlignment(SwingConstants.CENTER);

        label.setForeground(Color.GRAY);

        label.setFont(new Font("微软雅黑", Font.BOLD, 15));

        label.setBounds(15, 119, 65, 27);

        panel.add(label);

        label.setOpaque(true);

        everySize = new JTextField();

        everySize.setHorizontalAlignment(SwingConstants.CENTER);

        everySize.setFont(new Font("微软雅黑", Font.BOLD, 15));

        everySize.setColumns(10);

        everySize.setBounds(91, 121, 65, 21);

        panel.add(everySize);

        JLabel label_2 = new JLabel("进程名称");

        label_2.setOpaque(true);

        label_2.setHorizontalAlignment(SwingConstants.CENTER);

        label_2.setForeground(Color.GRAY);

        label_2.setFont(new Font("微软雅黑", Font.BOLD, 15));

        label_2.setBounds(15, 64, 65, 27);

        panel.add(label_2);

        workname = new JTextField();

        workname.setHorizontalAlignment(SwingConstants.CENTER);

        workname.setFont(new Font("微软雅黑", Font.BOLD, 15));

        workname.setColumns(10);

        workname.setBounds(91, 66, 65, 21);

        panel.add(workname);

        JLabel label_1 = new JLabel("KB");

        label_1.setHorizontalAlignment(SwingConstants.CENTER);

        label_1.setForeground(Color.GRAY);

        label_1.setFont(new Font("微软雅黑", Font.BOLD, 15));

        label_1.setBounds(155, 122, 26, 21);

        panel.add(label_1);

        JPanel panel_1 = new JPanel();

        panel_1.setBorder(new EtchedBorder(EtchedBorder.LOWERED, Color.DARK_GRAY, Color.PINK));

        panel_1.setBounds(10, 10, 324, 399);

        contentPane.add(panel_1);

        panel_1.setLayout(null);

        JLabel lblNewLabel_2 = new JLabel("模拟内存");

        lblNewLabel_2.setForeground(Color.GRAY);

        lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER);

        lblNewLabel_2.setFont(new Font("微软雅黑", Font.BOLD, 18));

        lblNewLabel_2.setBounds(64, 0, 118, 36);

        panel_1.add(lblNewLabel_2);

        JPanel panel_2 = new JPanel();

        panel_2.setBorder(new EtchedBorder(EtchedBorder.LOWERED, Color.BLACK, Color.DARK_GRAY));

        panel_2.setBounds(99, 50, 176, 312);

        panel_1.add(panel_2);

        panel_2.setLayout(null);

        final JPanel one = new JPanel();

        one.setBorder(new EtchedBorder(EtchedBorder.RAISED, Color.BLACK, null));

        one.setBounds(0, 0, 176, 54);

        panel_2.add(one);

        one.setLayout(null);

        JPanel two = new JPanel();

        two.setBorder(new EtchedBorder(EtchedBorder.RAISED, new Color(0, 0, 0), null));

        two.setBounds(0, 54, 176, 104);

        panel_2.add(two);

        two.setLayout(null);

        JPanel three = new JPanel();

        three.setBorder(new EtchedBorder(EtchedBorder.RAISED, Color.BLACK, null));

        three.setBounds(0, 158, 176, 154);

        panel_2.add(three);

        three.setLayout(null);

        final JLabel sizelabel = new JLabel("50KB");

        sizelabel.setHorizontalAlignment(SwingConstants.CENTER);

        sizelabel.setFont(new Font("微软雅黑", Font.BOLD, 14));

        sizelabel.setBounds(270, 68, 54, 19);

        panel_1.add(sizelabel);

        JLabel lblkb = new JLabel("100KB");

        lblkb.setHorizontalAlignment(SwingConstants.CENTER);

        lblkb.setFont(new Font("微软雅黑", Font.BOLD, 14));

        lblkb.setBounds(270, 144, 54, 19);

        panel_1.add(lblkb);

        JLabel lblkb_1 = new JLabel("150KB");

        lblkb_1.setHorizontalAlignment(SwingConstants.CENTER);

        lblkb_1.setFont(new Font("微软雅黑", Font.BOLD, 14));

        lblkb_1.setBounds(270, 292, 54, 19);

        panel_1.add(lblkb_1);

        final JLabel name[]=new JLabel[20];

        for(int i=0;i<20;i++)

        {

            name[i]=new JLabel();

            name[i].setFont(new Font("微软雅黑",Font.BOLD,12));

            name[i].setHorizontalAlignment(SwingConstants.CENTER);

            panel_1.add(name[i]);

        }

        final JLabel blocks[]=new JLabel[300];

        for(int i=0;i<50;i++)

        {

            blocks[i] = new JLabel("");

            blocks[i].setOpaque(false);

            one.add(blocks[i]);

        }

        for(int i=50;i<150;i++)

        {

            blocks[i] = new JLabel("");

            blocks[i].setOpaque(false);

            two.add(blocks[i]);

        }

        for(int i=150;i<300;i++)

        {

            blocks[i] = new JLabel("");

            blocks[i].setOpaque(false);

            three.add(blocks[i]);

        }

        //设置前指针和后指针,以及空闲区的初始长度

        final pointer pt[]=new pointer[3];

        for(int i=0;i<3;i++)

        {

            pt[i]=new pointer();

        }

        pt[0].prepointer=0;

        pt[0].nextpoint=50;

        pt[0].length=50;

        pt[0].signal=0;

        pt[1].prepointer=50;

        pt[1].nextpoint=150;

        pt[1].length=100;

        pt[1].signal=0;

        pt[2].prepointer=150;

        pt[2].nextpoint=300;

        pt[2].length=150;

        pt[2].signal=0;

        final JButton restartbutton = new JButton("重新开始");

        final JButton startbutton = new JButton("开始分配");

        startbutton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                String str=everySize.getText();

                int size=Integer.parseInt(str);

                String str1=count.getText();

                int num=Integer.parseInt(str1);

                String str2=workname.getText();

                int i;

                for(i=0;i<3;i++)

                {

                    if(pt[i].length<size||pt[i].signal==1)

                    {

                        continue;

                    }

                    else

                    {

                        for(int j=0;j<size;j++)            

                        {

                            if(pt[i].prepointer<50){

                                blocks[j+pt[i].prepointer].setBounds(2, j+2+pt[i].prepointer, 172, 1);

                                blocks[j+pt[i].prepointer].setBackground(new Color(250,0,0));

                                blocks[j+pt[i].prepointer].setOpaque(true);

                            }

                            if(pt[i].prepointer<150&&pt[i].prepointer>=50)

                            {

                                blocks[j+pt[i].prepointer].setBounds(2, j+2+pt[i].prepointer-50, 172, 1);

                                blocks[j+pt[i].prepointer].setBackground(new Color(0,250,0));

                                blocks[j+pt[i].prepointer].setOpaque(true);    

                            }

                            if(pt[i].prepointer<300&&pt[i].prepointer>=150)

                            {

                                blocks[j+pt[i].prepointer].setBounds(2, j+2+pt[i].prepointer-150, 172, 1);

                                blocks[j+pt[i].prepointer].setBackground(new Color(0,0,250));

                                blocks[j+pt[i].prepointer].setOpaque(true);    

                            }                                            

                        }

                        pt[i].prepointer=pt[i].prepointer+size;

                        pt[i].length=pt[i].length-size;

                        break;                        

                    }                    

                }                

                if(i==3)

                {JOptionPane.showMessageDialog(frame, "没有合适的空闲分区!", null, JOptionPane.WARNING_MESSAGE);}

                else

                {

                    name[num].setText(str2+" "+size+"KB");

                    name[num].setBounds(10, pt[i].prepointer+50-size, 79, 15);

                    num++;

                    count.setText(num+"");

                }

            }

        });

        startbutton.setFont(new Font("微软雅黑", Font.BOLD, 15));

        startbutton.setBounds(49, 178, 132, 34);

        panel.add(startbutton);        

        restartbutton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                pt[0].prepointer=0;

                pt[0].nextpoint=50;

                pt[0].length=50;

                pt[0].signal=0;

                pt[1].prepointer=50;

                pt[1].nextpoint=150;

                pt[1].length=100;

                pt[1].signal=0;

                pt[2].prepointer=150;

                pt[2].nextpoint=300;

                pt[2].length=150;

                pt[2].signal=0;

                for(int i=0;i<300;i++)

                {

                    blocks[i].setOpaque(false);

                    blocks[i].setBackground(new Color(240,240,240));

                }

                everySize.setText("");

                for(int i=0;i<20;i++)

                {

                    name[i].setText("");

                }

                workname.setText("");

            }

        });

        restartbutton.setFont(new Font("微软雅黑", Font.BOLD, 15));

        restartbutton.setBounds(49, 245, 132, 34);

        panel.add(restartbutton);

        count = new JTextField();

        count.setEditable(false);

        count.setText("0");

        count.setEnabled(false);

        count.setBounds(72, 253, 19, 15);

        panel.add(count);

        count.setColumns(10);

        count.setVisible(false);        

    }

}

内存的分配与回收

四、实验总结

   一开始在写程序的时候理解错了,导致后面写回收的时候出现了许多问题,导致回收那些代码出现了一点错乱,最后只能整个模块去回收,导致程序不完整。

在编写界面的时候由于对java界面的知识点了解相对比较少,导致在制作界面过程中遇到不少难题,最后是通过上网搜索相关知识和向老师或者同学请教才能解决。

你可能感兴趣的:(内存)