java的内存管理_操作系统实验——java内存管理

1.Test.java

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

Test.begin();

}

public static void begin(){

Free f=new Free();

Use u=new Use();

System.out.println("》》》--------------请选择操作----------《《《");

System.out.println("》》》--------------1.申请内存----------《《《");

System.out.println("》》》--------------2.释放内存----------《《《");

System.out.println("》》》--------------3.退出程序----------《《《");

Scanner sc=new Scanner(System.in);

int a=sc.nextInt();

while(a!=3){

switch(a){

case 1:u.use();break;

case 2:f.free();break;

}

System.out.println("》》》--------------请选择操作----------《《《");

System.out.println("》》》--------------1.申请内存----------《《《");

System.out.println("》》》--------------2.释放内存----------《《《");

System.out.println("》》》--------------3.退出程序----------《《《");

sc=new Scanner(System.in);

a=sc.nextInt();

}

System.out.println("系统退出成功!");

}

}

2.Use.java

import java.util.Scanner;

public class Use {

public static Node first=null;

public static Node tail=null;

public static int count=0;

public static int name=1;

public void use(){

System.out.println("请输入需要的内存空间:");

Scanner sc=new Scanner(System.in);

int a=Integer.parseInt(sc.nextLine());

if(a<=Free.all){

Node node=new Node();

if(count==0){

node.firstaddress=0;

node.length=a;

node.name=name;

first=node;

tail=node;

}

else{

node.firstaddress=tail.firstaddress+tail.length;

node.length=a;

node.name=name;

tail.next=node;

tail=node;

}

count++;

name++;

Free.all=Free.all-a;

}

else{

System.out.println("内存空间不够!");

}

Free.print();

}

}

3.Free.java

import java.util.Scanner;

public class Free {

public static Node first=null;

public static Node tail=null;

public static int count=0;

public static Node befortail=null;

public static int all=1000;

public void free(){

System.out.println("请输入要释放的内存块名:");

Scanner sc=new Scanner(System.in);

int a=Integer.parseInt(sc.nextLine());

Node node=new Node();

node=Use.first;

if(a==Use.first.name){

if(count==0){

first=node;

tail=node;

}

else{

tail.next=node;

tail=node;

}

Use.first=node.next;

}

else {

for(int i=0;i

if(node.name==a){

break;

}

befortail=node;

node=node.next;

}

if(count==0){

first=node;

tail=node;

}

else{

tail.next=node;

tail=node;

}

if(Use.tail!=Free.befortail.next){

Free.befortail.next=node.next;

}

else{

Use.tail=Free.befortail;

Use.tail.next=null;

}

}

count++;

Use.count--;

Free.merge();

Free.print();

}

public static void merge(){

Node[] node=new Node[100];

Node[] node2=new Node[100];

int a=0;

Node node1=new Node();

node1=first;

for(int i=0;i

if(node1!=null){

node[node1.name]=node1;

node1=node1.next;

}

}

for(int i=0;i<100;i++){

if(node[i]!=null){

node2[a]=node[i];

node2[a].next=null;

a++;

}

}

if(count>1){

for(int i=0;i

if(node2[i].firstaddress+node2[i].length==node2[i+1].firstaddress){

node2[i+1].firstaddress=node2[i].firstaddress;

node2[i+1].length=node2[i].length+node2[i+1].length;

node2[i]=null;

Free.count--;

}

}

}

if(node2[a-1].firstaddress+node2[a-1].length==1000-Free.all){

Free.all+=node2[a-1].length;

node2[a-1]=null;

Free.count--;

}

if(Free.count!=0){

if(node2[0]!=null){

first=node2[0];

}

else{

first=node2[1];

}

for(int i=0;i

if(node2[i]!=null){

befortail=node2[i];

befortail.next=node2[i+1];

}

}

}

}

public static void print(){

System.out.println("占用内存块表:");

System.out.println("内存块名 内存块首地址 内存块长");

Node node=new Node();

node=Use.first;

for(int i=0;i

if(node!=null){

System.out.println(" "+node.name+" "+node.firstaddress+" "+node.length);

node=node.next;

}

}

System.out.println("空闲内存块表:");

System.out.println("内存块名 内存块首地址 内存块长");

Node freenode=new Node();

freenode=Free.first;

for(int i=0;i

if(freenode!=null){

System.out.println(" "+freenode.name+" "+freenode.firstaddress+" "+freenode.length);

freenode=freenode.next;

}

}

}

}

4.Node.java

public class Node {

public int firstaddress;

public int length;

public int name;

public Node next;

}

实验5  内存管理(2学时)

一、实验目的

通过实验加强对内存管理方法的理解和掌握。

二、实验内容

编写程序实现采用可变分区方法管理内存。

三、实验要求

1、在该实验中,采用可变分区方式完成对存储空间的管理(即存储空间的分配与回收工作)。

2、设计用来记录主存使用情况的数据结构:已分区表和空闲分区表或链表。

3、在设计好的数据结构上设计一个主存分配算法(循环首次适应算法)。

4、在设计好的数据结构上设计一个主存回收算法。其中,若回收的分区有上邻空闲分区和(或)下邻空闲分区,要求合并为一个空闲分区登记在空闲分区表的一个表项里。

5、(附加)若需要可以实现程序的浮动,对内存空间进行紧凑

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值