+ All Categories
Home > Documents > CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui...

CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui...

Date post: 19-Jun-2020
Category:
Upload: others
View: 9 times
Download: 0 times
Share this document with a friend
64
CISC 3120 C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018 1 CUNY | Brooklyn College
Transcript
Page 1: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

CISC 3120

C10: Garbage Collection and Constructors

Hui Chen

Department of Computer & Information Science

CUNY Brooklyn College

3/5/2018 1CUNY | Brooklyn College

Page 2: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Outline

• Recap

• OOP in Java: composition & inheritance

• Project 1 and lessons learned?

• Memory management

• Java garbage collection

• Constructors

• Assignments

3/5/2018 CUNY | Brooklyn College 2

Page 3: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

More about Stack and Heap

• Two important region of memories

• The Stack

• The Heap

3/5/2018 CUNY | Brooklyn College 3

Page 4: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Stack

• Methods are “stacked”

• Stack is organized as stack frames

• A stack frame holds the state of the method (method invocation and automatic data)

• Program counter: which line of code being executed

• Automatic data: values of method parameters and local variables

3/5/2018 CUNY | Brooklyn College 4

Page 5: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Stack: Example

3/5/2018 CUNY | Brooklyn College 5

void doStuff() {

boolean b = true;

go(4);

}

void go(int x) {

int z = x + 24;

crazy();

}

Void crazy() {

int c = 36;

}

doStuff() b

doStuff() b

• doStuff gets called …

go(4) x, z

doStuff() b

go(4) x, z

crazy() c

doStuff() b

go(4) x, z

Page 6: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Heap

• Objects including their instance variables live

3/5/2018 CUNY | Brooklyn College 6

Cat ginger = new Cat() ;

Panther brave = new Panther();The “ginger” object

The “brave” object

ginger brave

Stack Heap

Page 7: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Questions?

• Stack and Heap

3/5/2018 CUNY | Brooklyn College 7

Page 8: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Program Data

• We restrict the definition of program data to data associated with variables

• Data are stored in the memory, and “referenced” via variables

• Variables are names assigned to allocated memory

• Program data: memory allocations of variables or referenced by the variables

• In C++ and Java, program data are in three categories

• Automatic

• Static

• Dynamic

3/5/2018 CUNY | Brooklyn College 8

Page 9: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Automatic, Static, and Dynamic Program Data

• They differ in

• (where) which region of memory the data reside

• (when) when and how the data is allocated in memory

• (when) when and how the data is deallocated in memory

• Variables

• where: scope: where it can be accessed, related to where it is allocated

• when: lifetime: when it is allocated and when it is deallocated

3/5/2018 CUNY | Brooklyn College 9

Page 10: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Automatic Data

• Memory is automatically allocated and deallocated for automatic data

• Where: the memory is allocated in a region of memory called the stack

• When to allocate: the memory is allocated when execution reaches the scope of the variable

• When to deallocate: the memory is deallocated when execution leaves the scope of the variable

3/5/2018 CUNY | Brooklyn College 10

Page 11: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Automatic Data: Examples

• In C++ and Java: where are the variables for automatic data?

3/5/2018 CUNY | Brooklyn College 11

int sumToNumber(int number) {

int sum = 0;

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

sum += i; }

return sum;

}

Page 12: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Automatic Data: Examples

• In C++ and Java: where are the variables for automatic data?

• Parameter: number

• Local variables:

• sum

• i

• What are their scopes?

3/5/2018 CUNY | Brooklyn College 12

int sumToNumber(int number) {

int sum = 0;

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

sum += i; }

return sum;

}

Page 13: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Automatic Data: Examples

• In C++ and Java: where are the variables for automatic data?

• What are their scopes?

3/5/2018 CUNY | Brooklyn College 13

int sumToNumber(int number) {

int sum = 0;

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

sum += i; }

return sum;

}

numberi

sum

Page 14: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Automatic Data: C++ and Java

• C++ permits automatic object allocation while Java does not

• Example: the effect in C++ and that in Java are different

• In C++, a Cat object is allocated and instantiated in the Stack; in Java, only a reference variable in the Stack

3/5/2018 CUNY | Brooklyn College 14

void method() {

Cat cat;

}

Page 15: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Automatic Data: C++ and Java

• In C++, object is allocated and instantiated in the Stack; in Java, only a reference variable in the Stack

C++ Java

3/5/2018 CUNY | Brooklyn College 15

void method() {

Cat cat;

}

void method() {

Cat cat;

}

void method() {

Cat *cat;

}

void method() {

Cat cat;

}

Page 16: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Questions?

• Memory, program data, and variables

• Automatic program data

3/5/2018 CUNY | Brooklyn College 16

Page 17: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data

• Static data’s existence does not change during the entire execution of a program

• Where:

• the memory for static data is allocated in a region of memory, generically referred to as the static data segment

• When to allocate:

• the memory is allocated when the program starts,

• or when execution reaches the static variable declaration for the first time

• When to deallocate:

• the memory for static data is deallocated when the program exits

3/5/2018 CUNY | Brooklyn College 17

Page 18: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data: Example in C++

• In C++: where are the variables for static data?

3/5/2018 CUNY | Brooklyn College 18

int sumToNumber(int number) {

static int sum = 0;

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

sum += i; }

return sum;

}

Page 19: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data: Example in C++

• In C++: where are the variables for static data?

• Local variable: sum

• What is its scope?

3/5/2018 CUNY | Brooklyn College 19

int sumToNumber(int number) {

static int sum = 0;

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

sum += i; }

return sum;

}

Page 20: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data: Example in C++

• In C++: where are the variables for static data?

• What are their scopes?

3/5/2018 CUNY | Brooklyn College 20

int sumToNumber(int number) {

static int sum = 0;

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

sum += i; }

}

sum

Page 21: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static and Automatic Data: Example in C++

• In C++: when are they allocated and deallocated?

3/5/2018 CUNY | Brooklyn College 21

int sumToNumber(int number) {

static int sum = 0;

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

sum += i; }

return sum;

}

int sumToNumber(int number) {

int sum = 0;

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

sum += i; }

return sum;

}

Page 22: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static and Automatic Data: Example in C++

• How do the lifetimes of the automatic and static variables differ?

• Compare them in running programs

• When sum is static

• When sum is automatic

3/5/2018 CUNY | Brooklyn College 22

cout << sumToNumber(5) << endl;

cout << sumToNumber(5) << endl;

Page 23: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data in C++

• In C++

• Variables declared as “static”

• Additionally, variables declared outside any function and class body

3/5/2018 CUNY | Brooklyn College 23

Page 24: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data: Example in Java

• Can we write the following in Java?

3/5/2018 CUNY | Brooklyn College 24

int sumToNumber(int number) {

static int sum = 0;

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

sum += i; }

return sum;

}

Page 25: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data in Java

• Can we write the following in Java?

3/5/2018 CUNY | Brooklyn College 25

int sumToNumber(int number) {

static int sum = 0;

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

sum += i; }

return sum;

}

Page 26: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data in Java

• Java is more restrictive

• Static variables can only declared within a class, but not within any methods

• Static variables are class variables with the scope of the class

• There exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created

3/5/2018 CUNY | Brooklyn College 26

Page 27: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data: Example in Java

• Where are the static variables?

3/5/2018 CUNY | Brooklyn College 27

class StaticSum {

static int sum = 0;

int sumToNumber(int number) {

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

sum += i; }

return sum;

}

}

Page 28: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data: Example in Java

• What is its scope?

3/5/2018 CUNY | Brooklyn College 28

class StaticSum {

static int sum = 0;

int sumToNumber(int number) {

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

sum += i; }

return sum;

}

}

Page 29: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data: Example in Java

• What is the output of this program?

3/5/2018 CUNY | Brooklyn College 29

class StaticSum {

public static void main(String[] args) { StaticSum s = new StaticSum();

System.out.println(s.sumToNumber(5)); System.out.println(s.sumToNumber(5));

}

int sumToNumber(int number) {

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

sum += i; }

return sum;

}

static int sum = 0;

}

Page 30: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Static Data in Java

• Java is more restrictive

• Static variables can only declared within a class, but not within any methods

• Static variables are class variables with the scope of the class

• Static variables has globe scope

• Static variables has the lifetime of the program

• Local and inner classes are only allowed with final static variables

• To ensure that there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created

3/5/2018 CUNY | Brooklyn College 30

Page 31: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Questions?

• Static program data

• Difference between C++ and Java in terms of static program data

3/5/2018 CUNY | Brooklyn College 31

Page 32: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Dynamic Data

• Programmers are responsible for allocating dynamic data

• In C++: programmers are also responsible for deallocating the dynamic data.

• Where: the memory for static data is allocated in a region of memory, generically referred to as the heap

• When to allocate:

• the memory is allocated when the programmer invokes the “new” operator.

• When to deallocate:

• In Java: when the Java Garbage Collector reclaims the object allocated

• In C++: when the programmer invokes the delete operator to free the memory allocated to the dynamic data

3/5/2018 CUNY | Brooklyn College 32

Page 33: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Dynamic Data in C++ and Java

• In C++, programmers can allocate memory for any data types, i.e., to use “new” operator against any data types

• In Java, programmers can only use “new” operator for reference data types

3/5/2018 CUNY | Brooklyn College 33

Page 34: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Dynamic Data in C++ and Java: Examples

• In Java: which one of the following is legal?

• In C++: which one of the following is legal?

3/5/2018 CUNY | Brooklyn College 34

int i = new int;

int *iPtr = new int;

Cat ginger = new Cat(); int[] iArr = new int[10];

Cat *gingerPtr = new Cat(); int* iArr = new int[10];

Page 35: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Dynamic Data in C++ and Java: Examples

• In Java: which one of the following is legal?

• In C++: which one of the following is legal?

3/5/2018 CUNY | Brooklyn College 35

int i = new int;

int *iPtr = new int;

Cat ginger = new Cat(); int[] iArr = new int[10];

Cat *gingerPtr = new Cat(); int* iArr = new int[10];

Page 36: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Dynamic Data: Java and C++ Comparison• Allocation:

• The same

• Java and C++: dynamic data are created using the new operator

• The different

• In Java: dynamic data can only be objects, cannot be primitive data types.

• In C++: dynamic data can be any data types

• Deallocation

• The different

• In C++: programmers use the delete operator to deallocate memory

• In Java: Java Garbage Collector is responsible for deallocating the memory, programmers have little control.

3/5/2018 CUNY | Brooklyn College 36

Page 37: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Objects in Java and C++

• C++ can have both automatically and dynamically allocated objects

• Java has only dynamically allocated objects

3/5/2018 CUNY | Brooklyn College 37

Cat *ginger = new Cat();

ginger->pounce();

(*ginger).pounce();

Cat ginger;

ginger.pounce();

Cat ginger = new Cat()

ginger.pounce();

Cat ginger;

ginger.pounce();

Page 38: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Objects in Java and C++

• C++ can have both automatically and dynamically allocated objects

• Java has only dynamically allocated objects

3/5/2018 CUNY | Brooklyn College 38

Cat *ginger = new Cat();

ginger->pounce();

(*ginger).pounce();

Cat ginger;

ginger.pounce();

Cat ginger = new Cat()

ginger.pounce();

Cat ginger;

ginger.pounce();

Page 39: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Dynamic Data: Programming Error in C++

• Programmers are responsible for managing dynamic data, which is error-prone

• Common errors

• Inaccessible objects

• Memory leaks

• Dangling pointers

• A little bit more about C++ memory management next

3/5/2018 CUNY | Brooklyn College 39

Page 40: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Memory Management in C++

• In C++: compare the following two.

3/5/2018 CUNY | Brooklyn College 40

Cat *ginger = new Cat();

ginger = nullptr;

Cat *ginger = new Cat();

delete ginger;

ginger = nullptr;

Page 41: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Memory Management in C++

• In C++: compare the following two.

• A programmer must explicitly free the memory of an object allocated in the Heap in a C++ program; otherwise, the memory cannot be reclaimed and used in the program.

3/5/2018 CUNY | Brooklyn College 41

Cat *ginger = new Cat();

ginger = nullptr;

Cat *ginger = new Cat();

delete ginger;

ginger = nullptr;

Page 42: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Complexity of Memory Management in C++

• Automatic and Heap storage in C++

• How about the following example?

3/5/2018 CUNY | Brooklyn College 42

Cat ginger(“ginger”);

Cat tuxedo(“tuxedo”);

ginger.tap(tuxedo);

// programmers don’t free memory

Cat *ginger = new Cat(“ginger”);

Cat tuxedo;

ginger->tap(tuxedo);

delete ginger; // must free memory

Cat ginger;

Cat *catptr = &ginger;

delete catptr;

Page 43: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Complexity of Memory Management in C++

• Automatic and Heap storage in C++

• How about the following example?

3/5/2018 CUNY | Brooklyn College 43

Cat ginger(“ginger”);

Cat tuxedo(“tuxedo”);

ginger.tap(tuxedo);

// programmers don’t free memory

Cat *ginger = new Cat(“ginger”);

Cat tuxedo;

ginger->tap(tuxedo);

delete ginger; // must free memory

Cat ginger;

Cat *catptr = &ginger;

delete catptr;

Page 44: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Memory Management in Java

• In Java:

• Programmers generally do not deal with reclaiming the memory.

• Java Garbage Collector takes care of it.

3/5/2018 CUNY | Brooklyn College 44

Cat ginger = new Cat();

Cat tuxedo = new Cat();

ginger.tap(tuxedo);

Cat ginger = new Cat();

ginger.tap(new Cat());

Page 45: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Memory Management in Java

• In Java:

• In C++

3/5/2018 CUNY | Brooklyn College 45

Cat ginger = new Cat();

Cat tuxedo = new Cat();

ginger.tap(tuxedo);

Cat ginger = new Cat();

ginger.tap(new Cat());

Cat *ginger = new Cat();

Cat *tuxedo = new Cat();

ginger->tap(*tuxedo);

delete ginger;

delete tuxedo;

Cat *ginger = new Cat();

ginger->tap(*(new Cat()));

delete ginger

// how about the other cat?

Page 46: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Memory Management in Java

• In Java:

• In C++

3/5/2018 CUNY | Brooklyn College 46

Cat ginger = new Cat();

Cat tuxedo = new Cat();

ginger.tap(tuxedo);

Cat ginger = new Cat();

ginger.tap(new Cat());

Cat *ginger = new Cat();

Cat *tuxedo = new Cat();

ginger->tap(*tuxedo);

delete ginger;

delete tuxedo;

Cat *ginger = new Cat();

ginger->tap(*(new Cat()));

delete ginger

// how about the other cat?

Page 47: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Questions?

• Dynamic data in Java and C++

• Review C++ and Java memory management

• How they affect the ways to write programs

• JVM takes away some responsibility from programmers

• Next, we shall discuss more about program data, memory management/JVM, and constructor

3/5/2018 CUNY | Brooklyn College 47

Page 48: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Java Garbage Collector

• Java is responsible for deallocating dynamic data, and programmers are not.

• In Java, we often write

• In C++, we never write (although it compiles)

3/5/2018 CUNY | Brooklyn College 48

Cat ginger = new Cat();

ginger.pounce(new Animal());

Cat *ginger = new Cat();

ginger->pounce(new Animal());

Page 49: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Different Garbage Collection Algorithms

• How does a Garbage Collector figure out an object is no longer needed and can be deallocated?

• Reference counting

• Trace-based garbage collector

• e.g., Baker’s algorithm

• Copying collector

3/5/2018 CUNY | Brooklyn College 49

Page 50: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Advantage of Garbage Collection

• Avoid bugs, such as,

• Forget to free memory (memory leak)

• Use already freed objects (dangling pointers)

• Also in Java, programmers do not have direct memory access, and cannot accidentally overwrite memory.

3/5/2018 CUNY | Brooklyn College 50

Page 51: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Disadvantage of Garbage Collection

• Consume resources (memory and processor)

• Unpredictable stalls

• Memory leak still possible, but harder to understand

• No manual control

3/5/2018 CUNY | Brooklyn College 51

Page 52: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Questions

• Concept of Garbage Collector

• Programming in Java that does garbage collection

3/5/2018 CUNY | Brooklyn College 52

Page 53: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Constructors

• Like C++, constructors in Java

• have the identical name as the name of the class,

• do not specify return type,

• are called when an object is created,

• and are responsible for initializing the object (instance variables)

3/5/2018 CUNY | Brooklyn College 53

Page 54: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Default Constructor

• Java compiler provides the default constructor when no constructor is written.

3/5/2018 CUNY | Brooklyn College 54

Cat ginger = new Cat(); // calling default constructor

ginger.pounce(new Cat());

class Cat {

void pounce(Cat otherCat) {…}

}

Page 55: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Default Constructor?

• Can we use the default constructor now?

3/5/2018 CUNY | Brooklyn College 55

Cat ginger = new Cat();

ginger.pounce(new Cat(“tiger”));

class Cat {

private String name;

public Cat(String name) {this.name = name;}

void pounce(Cat otherCat) { … }

}

Page 56: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Default Constructor?

• Can we use the default constructor now?

3/5/2018 CUNY | Brooklyn College 56

Cat ginger = new Cat();

ginger.pounce(new Cat(“tiger”));

class Cat {

private String name;

public Cat(String name) {this.name = name;}

void pounce(Cat otherCat) { … }

}

Page 57: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Default and Parameterized Constructors

• Java ceases to create the default constructor when a constructor is provided

3/5/2018 CUNY | Brooklyn College 57

class Cat {

private String name;

public Cat() {name = “cat”;}

public Cat(String name) {this.name = name;}

void pounce(Cat otherCat) { … }

}

Cat ginger = new Cat(); …

Page 58: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Questions?

• Purpose of constructors

• Default constructor

3/5/2018 CUNY | Brooklyn College 58

Page 59: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Constructor and Inheritance

• When we create an object of a class, constructors of all super-classes must be called explicitly or implicitly

• Can you name the constructors being called for this example?

3/5/2018 CUNY | Brooklyn College 59

Animal

Feline

Cat PantherPanther brave = new Panther(“brave”);

Page 60: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Calling Super Class’s Constructor Implicitly

• What if we write the constructor as follows,

3/5/2018 CUNY | Brooklyn College 60

class Panther extends Feline {

Color color;

public Panther(String name, Color color) {

this.color = color;

}

public void makeNoise() {…}

}

Animal

Feline

Cat Panther

Page 61: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Calling Super Class’s Constructor Implicitly

• Java compiler will call Feline’s default constructor.

3/5/2018 CUNY | Brooklyn College 61

class Panther extends Feline {

Color color;

public Panther(String name, Color color) {

this.color = color;

}

public void makeNoise() {…}

}

Animal

Feline

Cat Panther

Page 62: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Calling Super Class’s Constructor Explicitly

• Use “super”

3/5/2018 CUNY | Brooklyn College 62

class Panther extends Feline {

Color color;

public Panther(String name, Color color) {

super(name);

this.color = color;

}

public void makeNoise() {…}

}

Animal

Feline

Cat Panther

Page 63: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Questions?

• Constructors

• Default constructor

• Overloading constructors

• Inheritance and constructors

• Stack and heap

3/5/2018 CUNY | Brooklyn College 63

Page 64: CISC 3120 C10: Garbage Collection and Constructors · C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018

Assignments

• Project 1

• How is it going?

• CodeLab

• Upcoming Project 2

• This Wednesday (on inheritance & polymorphism)

3/5/2018 CUNY | Brooklyn College 64


Recommended