C10: Garbage Collection and Constructors

Similar documents
C11: Garbage Collection and Constructors

C18a: Abstract Class and Method

C09: Interface and Abstract Class and Method

C09: Interface, and Abstract Class and Method

Contents. 8-1 Copyright (c) N. Afshartous

C08: Inheritance and Polymorphism

CMSC 132: Object-Oriented Programming II

C08: Inheritance and Polymorphism

Pointers and Terminal Control

3.Constructors and Destructors. Develop cpp program to implement constructor and destructor.

Classes and Inheritance Extending Classes, Chapter 5.2

CMSC 132: Object-Oriented Programming II

Short Notes of CS201

CS201 - Introduction to Programming Glossary By

Object Oriented Programming: In this course we began an introduction to programming from an object-oriented approach.

Memory Allocation. Static Allocation. Dynamic Allocation. Dynamic Storage Allocation. CS 414: Operating Systems Spring 2008

Java Magistère BFA

Lecture 6 Introduction to Objects and Classes

Object-Oriented Programming More Inheritance

Argument Passing All primitive data types (int etc.) are passed by value and all reference types (arrays, strings, objects) are used through refs.

CMSC 330: Organization of Programming Languages

Memory and C++ Pointers

INITIALISING POINTER VARIABLES; DYNAMIC VARIABLES; OPERATIONS ON POINTERS

Exercise: Singleton 1

Class Information ANNOUCEMENTS

Name, Scope, and Binding. Outline [1]

Lecture 14. No in-class files today. Homework 7 (due on Wednesday) and Project 3 (due in 10 days) posted. Questions?

Lecture 23: Object Lifetime and Garbage Collection

Vector and Free Store (Vectors and Arrays)

Pointers II. Class 31

Dynamic Allocation of Memory

Java Basic Syntax. Java vs C++ Wojciech Frohmberg / OOP Laboratory. Poznan University of Technology

Class, Variable, Constructor, Object, Method Questions

StackVsHeap SPL/2010 SPL/20

CISC 3115 TY3. C09a: Inheritance. Hui Chen Department of Computer & Information Science CUNY Brooklyn College. 9/20/2018 CUNY Brooklyn College

Operating Systems CMPSCI 377, Lec 2 Intro to C/C++ Prashant Shenoy University of Massachusetts Amherst

Memory management COSC346

Chapter 2. Procedural Programming

Instance Members and Static Members

Paytm Programming Sample paper: 1) A copy constructor is called. a. when an object is returned by value

CMSC 330: Organization of Programming Languages

CMSC 330: Organization of Programming Languages. Memory Management and Garbage Collection

CPSC 427: Object-Oriented Programming

C02: Overview of Software Development and Java

엄현상 (Eom, Hyeonsang) School of Computer Science and Engineering Seoul National University COPYRIGHTS 2017 EOM, HYEONSANG ALL RIGHTS RESERVED

Pointers and Dynamic Memory Allocation

Attributes, Bindings, and Semantic Functions Declarations, Blocks, Scope, and the Symbol Table Name Resolution and Overloading Allocation, Lifetimes,

Scope and Parameter Passing

Manual Allocation. CS 1622: Garbage Collection. Example 1. Memory Leaks. Example 3. Example 2 11/26/2012. Jonathan Misurda

Homework 6. Yuji Shimojo CMSC 330. Instructor: Prof. Reginald Y. Haseltine

COMP 110/L Lecture 20. Kyle Dewey

Example: Count of Points

C12a: The Object Superclass and Selected Methods

Object-Oriented Programming for Scientific Computing

COMP200 INTERFACES. OOP using Java, from slides by Shayan Javed

Chapter 2: Java OOP I

Outline. Java Models for variables Types and type checking, type safety Interpretation vs. compilation. Reasoning about code. CSCI 2600 Spring

CSE 303: Concepts and Tools for Software Development

Chapter 6 Introduction to Defining Classes

Lecture 2, September 4

Agenda CS121/IS223. Reminder. Object Declaration, Creation, Assignment. What is Going On? Variables in Java

Outline. Dynamic Memory Classes Dynamic Memory Errors In-class Work. 1 Chapter 10: C++ Dynamic Memory

Java Fundamentals (II)

1 Shyam sir JAVA Notes

Run-time Environments

Run-time Environments

Object Reference and Memory Allocation. Questions:

Objects Managing a Resource

Declarations and Access Control SCJP tips

CA31-1K DIS. Pointers. TA: You Lu

CSI33 Data Structures

G Programming Languages - Fall 2012

CS121/IS223. Object Reference Variables. Dr Olly Gotel

Example: Count of Points

Written by John Bell for CS 342, Spring 2018

Lecture Notes on Programming Languages

In Java we have the keyword null, which is the value of an uninitialized reference type

POLYMORPHISM 2 PART. Shared Interface. Discussions. Abstract Base Classes. Abstract Base Classes and Pure Virtual Methods EXAMPLE

POLYMORPHISM 2 PART Abstract Classes Static and Dynamic Casting Common Programming Errors

Scope and Parameter Passing

Starting Savitch Chapter 10. A class is a data type whose variables are objects. Some pre-defined classes in C++ include int,

Chapter 4 Java Language Fundamentals

CLASSES AND OBJECTS IN JAVA

CMSC 202 Section 010x Spring Justin Martineau, Tuesday 11:30am

Answer: Early binding generally leads to greater efficiency (compilation approach) Late binding general leads to greater flexibility

(5-1) Object-Oriented Programming (OOP) and C++ Instructor - Andrew S. O Fallon CptS 122 (February 4, 2019) Washington State University

Chapter 1 GETTING STARTED. SYS-ED/ Computer Education Techniques, Inc.

COMP6771 Advanced C++ Programming

CISC370: Inheritance

CE221 Programming in C++ Part 2 References and Pointers, Arrays and Strings

Object Oriented Programming is a programming method that combines: Advantage of Object Oriented Programming

CSE 100: C++ TEMPLATES AND ITERATORS

Variables, Memory and Pointers

CSC1322 Object-Oriented Programming Concepts

Lecture 15a Persistent Memory & Shared Pointers

内存管理. Memory management

Structure of Programming Languages Lecture 10

Inheritance and Polymorphism

The issues. Programming in C++ Common storage modes. Static storage in C++ Session 8 Memory Management

Data Abstraction. Hwansoo Han

Transcription:

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

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

More about Stack and Heap Two important region of memories The Stack The Heap 3/5/2018 CUNY Brooklyn College 3

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

Stack: Example dostuff gets called dostuff() b go(4) dostuff() go(4) x, z dostuff() b crazy() c go(4) x, z dostuff() b x, z b void dostuff() { boolean b = true; go(4); void go(int x) { int z = x + 24; crazy(); Void crazy() { int c = 36; 3/5/2018 CUNY Brooklyn College 5

Heap Objects including their instance variables live Cat ginger = new Cat() ; Panther brave = new Panther(); The ginger object The brave object ginger Stack brave Heap 3/5/2018 CUNY Brooklyn College 6

Questions? Stack and Heap 3/5/2018 CUNY Brooklyn College 7

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

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

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

Automatic Data: Examples In C++ and Java: where are the variables for automatic data? int sumtonumber(int number) { int sum = 0; for (int i=0; i<=number; i++) { sum += i; return sum; 3/5/2018 CUNY Brooklyn College 11

Automatic Data: Examples In C++ and Java: where are the variables for automatic data? Parameter: number Local variables: sum i What are their scopes? int sumtonumber(int number) { int sum = 0; for (int i=0; i<number; i++) { sum += i; return sum; 3/5/2018 CUNY Brooklyn College 12

Automatic Data: Examples In C++ and Java: where are the variables for automatic data? What are their scopes? int sumtonumber(int number) { int sum = 0; i for (int i=0; i<=number; i++) { sum += i; sum number return sum; 3/5/2018 CUNY Brooklyn College 13

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 void method() { Cat cat; 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

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++ void method() { Java void method() { Cat cat; Cat cat; void method() { void method() { Cat *cat; Cat cat; 3/5/2018 CUNY Brooklyn College 15

Questions? Memory, program data, and variables Automatic program data 3/5/2018 CUNY Brooklyn College 16

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

Static Data: Example in C++ In C++: where are the variables for static data? int sumtonumber(int number) { static int sum = 0; for (int i=0; i<number; i++) { sum += i; return sum; 3/5/2018 CUNY Brooklyn College 18

Static Data: Example in C++ In C++: where are the variables for static data? Local variable: sum What is its scope? int sumtonumber(int number) { static int sum = 0; for (int i=0; i<number; i++) { sum += i; return sum; 3/5/2018 CUNY Brooklyn College 19

Static Data: Example in C++ In C++: where are the variables for static data? What are their scopes? int sumtonumber(int number) { static int sum = 0; for (int i=0; i<number; i++) { sum += i; sum 3/5/2018 CUNY Brooklyn College 20

Static and Automatic Data: Example in C++ In C++: when are they allocated and deallocated? 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; 3/5/2018 CUNY Brooklyn College 21

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 cout << sumtonumber(5) << endl; cout << sumtonumber(5) << endl; 3/5/2018 CUNY Brooklyn College 22

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

Static Data: Example in Java Can we write the following in Java? int sumtonumber(int number) { static int sum = 0; for (int i=0; i<number; i++) { sum += i; return sum; 3/5/2018 CUNY Brooklyn College 24

Static Data in Java Can we write the following in Java? int sumtonumber(int number) { static int sum = 0; for (int i=0; i<number; i++) { sum += i; return sum; 3/5/2018 CUNY Brooklyn College 25

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

Static Data: Example in Java Where are the static variables? class StaticSum { static int sum = 0; int sumtonumber(int number) { for (int i=0; i<number; i++) { sum += i; return sum; 3/5/2018 CUNY Brooklyn College 27

Static Data: Example in Java What is its scope? class StaticSum { static int sum = 0; int sumtonumber(int number) { for (int i=0; i<number; i++) { sum += i; return sum; 3/5/2018 CUNY Brooklyn College 28

Static Data: Example in Java What is the output of this program? 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; 3/5/2018 CUNY Brooklyn College 29

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

Questions? Static program data Difference between C++ and Java in terms of static program data 3/5/2018 CUNY Brooklyn College 31

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

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

Dynamic Data in C++ and Java: Examples In Java: which one of the following is legal? int i = new int; Cat ginger = new Cat(); int[] iarr = new int[10]; In C++: which one of the following is legal? int *iptr = new int; Cat *gingerptr = new Cat(); int* iarr = new int[10]; 3/5/2018 CUNY Brooklyn College 34

Dynamic Data in C++ and Java: Examples In Java: which one of the following is legal? int i = new int; Cat ginger = new Cat(); int[] iarr = new int[10]; In C++: which one of the following is legal? int *iptr = new int; Cat *gingerptr = new Cat(); int* iarr = new int[10]; 3/5/2018 CUNY Brooklyn College 35

Dynamic Data: Java and C++ Comparison Allocation: The same Java and C++: dynamic data are created using the new operator The different Deallocation In Java: dynamic data can only be objects, cannot be primitive data types. In C++: dynamic data can be any data types 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

Objects in Java and C++ C++ can have both automatically and dynamically allocated objects Cat *ginger = new Cat(); Cat ginger; ginger->pounce(); (*ginger).pounce(); ginger.pounce(); Java has only dynamically allocated objects Cat ginger; ginger.pounce(); Cat ginger = new Cat() ginger.pounce(); 3/5/2018 CUNY Brooklyn College 37

Objects in Java and C++ C++ can have both automatically and dynamically allocated objects Cat ginger; ginger.pounce(); Cat *ginger = new Cat(); ginger->pounce(); (*ginger).pounce(); Java has only dynamically allocated objects Cat ginger; ginger.pounce(); Cat ginger = new Cat() ginger.pounce(); 3/5/2018 CUNY Brooklyn College 38

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

Memory Management in C++ In C++: compare the following two. Cat *ginger = new Cat(); ginger = nullptr; Cat *ginger = new Cat(); delete ginger; ginger = nullptr; 3/5/2018 CUNY Brooklyn College 40

Memory Management in C++ In C++: compare the following two. Cat *ginger = new Cat(); ginger = nullptr; Cat *ginger = new Cat(); delete ginger; ginger = nullptr; 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

Complexity of Memory Management in C++ Automatic and Heap storage in C++ 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 How about the following example? Cat ginger; Cat *catptr = &ginger; delete catptr; 3/5/2018 CUNY Brooklyn College 42

Complexity of Memory Management in C++ Automatic and Heap storage in C++ 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 How about the following example? Cat ginger; Cat *catptr = &ginger; delete catptr; 3/5/2018 CUNY Brooklyn College 43

Memory Management in Java In Java: Cat ginger = new Cat(); Cat tuxedo = new Cat(); ginger.tap(tuxedo); Cat ginger = new Cat(); ginger.tap(new Cat()); Programmers generally do not deal with reclaiming the memory. Java Garbage Collector takes care of it. 3/5/2018 CUNY Brooklyn College 44

Memory Management in Java In Java: Cat ginger = new Cat(); Cat tuxedo = new Cat(); ginger.tap(tuxedo); In C++ Cat *ginger = new Cat(); Cat *tuxedo = new Cat(); ginger->tap(*tuxedo); delete ginger; delete tuxedo; Cat ginger = new Cat(); ginger.tap(new Cat()); Cat *ginger = new Cat(); ginger->tap(*(new Cat())); delete ginger // how about the other cat? 3/5/2018 CUNY Brooklyn College 45

Memory Management in Java In Java: Cat ginger = new Cat(); Cat tuxedo = new Cat(); ginger.tap(tuxedo); In C++ Cat *ginger = new Cat(); Cat *tuxedo = new Cat(); ginger->tap(*tuxedo); delete ginger; delete tuxedo; Cat ginger = new Cat(); ginger.tap(new Cat()); Cat *ginger = new Cat(); ginger->tap(*(new Cat())); delete ginger // how about the other cat? 3/5/2018 CUNY Brooklyn College 46

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

Java Garbage Collector Java is responsible for deallocating dynamic data, and programmers are not. In Java, we often write Cat ginger = new Cat(); ginger.pounce(new Animal()); In C++, we never write (although it compiles) Cat *ginger = new Cat(); ginger->pounce(new Animal()); 3/5/2018 CUNY Brooklyn College 48

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

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

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

Questions Concept of Garbage Collector Programming in Java that does garbage collection 3/5/2018 CUNY Brooklyn College 52

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

Default Constructor Java compiler provides the default constructor when no constructor is written. class Cat { void pounce(cat othercat) { Cat ginger = new Cat(); // calling default constructor ginger.pounce(new Cat()); 3/5/2018 CUNY Brooklyn College 54

Default Constructor? class Cat { private String name; public Cat(String name) {this.name = name; void pounce(cat othercat) { Can we use the default constructor now? Cat ginger = new Cat(); ginger.pounce(new Cat( tiger )); 3/5/2018 CUNY Brooklyn College 55

Default Constructor? class Cat { private String name; public Cat(String name) {this.name = name; void pounce(cat othercat) { Can we use the default constructor now? Cat ginger = new Cat(); ginger.pounce(new Cat( tiger )); 3/5/2018 CUNY Brooklyn College 56

Default and Parameterized Constructors Java ceases to create the default constructor when a constructor is provided class Cat { private String name; public Cat() {name = cat ; public Cat(String name) {this.name = name; void pounce(cat othercat) { Cat ginger = new Cat(); 3/5/2018 CUNY Brooklyn College 57

Questions? Purpose of constructors Default constructor 3/5/2018 CUNY Brooklyn College 58

Constructor and Inheritance When we create an object of a class, constructors of all superclasses must be called explicitly or implicitly Can you name the constructors being called for this example? Animal Feline Panther brave = new Panther( brave ); Cat Panther 3/5/2018 CUNY Brooklyn College 59

Calling Super Class s Constructor Implicitly What if we write the constructor as follows, class Panther extends Feline { Color color; public Panther(String name, Color color) { this.color = color; public void makenoise() { Cat Animal Feline Panther 3/5/2018 CUNY Brooklyn College 60

Calling Super Class s Constructor Implicitly Java compiler will call Feline s default constructor. Animal class Panther extends Feline { Color color; public Panther(String name, Color color) { Feline this.color = color; public void makenoise() { Cat Panther 3/5/2018 CUNY Brooklyn College 61

Calling Super Class s Constructor Explicitly Use super class Panther extends Feline { Animal Color color; public Panther(String name, Color color) { super(name); this.color = color; Feline public void makenoise() { Cat Panther 3/5/2018 CUNY Brooklyn College 62

Questions? Constructors Default constructor Overloading constructors Inheritance and constructors Stack and heap 3/5/2018 CUNY Brooklyn College 63

Assignments Project 1 How is it going? CodeLab Upcoming Project 2 This Wednesday (on inheritance & polymorphism) 3/5/2018 CUNY Brooklyn College 64