-
Notifications
You must be signed in to change notification settings - Fork 0
homework
Share your code with user fmcarvalho
in a private Github repository named isel-lae-2024-your_number
.
Create a new folder for each homework.
On folder lesson03-TPC
run javap -p apps/Amber.class
to analyze the metadata of Amber.class
.
-
Write in Java an equivalent class to the output produced by
javap
-
Make a prediction about the expected layout and size of an instance of the
Amber
class in the JVM 64-bit model, 8-byte alignment and no compressed references. Save your design in a fileamber-layout.txt
-
Verify your expectations in point 2 comparing it to the result of the output of JOL for
Hotspot Layout Simulation (JDK 15, 64-bit model, NO compressed references, NO compressed classes, 8-byte aligned)
. Run JOL with:
java -cp .;jol-cli-0.17-full.jar org.openjdk.jol.Main estimates apps.Amber
NOTE: Replace ;
by :
on -cp
if you are using a linux-based terminal
Consider the following definition of types A, B, C, and I. Given the use of those types in main
, answer the following questions:
- Predict the output of the execution of the
main
function. - What are the differences in resulting output if we remove the
final
keyword fromvirtualFoo
in class B? - Keeping the definition of types A, B, C, and I as it is, what would be the result of adding the following implementation in class C:
public void virtualFoo() { out.println("C"); }
- Provide an equivalent implementation in Kotlin for types A, B, C, and I, with only the method
virtualFoo
to achieve the same result as in question 1. Do not include the static methodfoo
.
interface I { void virtualFoo(); }
class A {
public static void foo() { out.println("A"); }
public void virtualFoo(){ out.println("B"); }
}
class B extends A implements I {
public static void foo() { out.println("B"); }
public final void virtualFoo(){ out.println("B"); }
}
class C extends B {
public static void foo(){ out.println("C"); }
} |
public static void main(String[] args) {
final C c = new C();
final A a = c;
final B b = c;
final I i = c;
a.foo();
a.virtualFoo();
b.foo();
b.virtualFoo();
c.foo();
c.virtualFoo();
i.virtualFoo();
} |