Q1. When are static variables loaded in memory ?
Ans. They are loaded at runtime when the respective Class is loaded.
Q2. What is a String Pool ?
Ans. String pool (String
intern pool) is a special storage area in Java heap. When a string is
created and if the string already exists in the pool, the reference of
the existing string will be returned, instead of creating a new object
and returning its reference.
Q3. how many objects are created with this code ?
String s =new String("abc");
Ans. Two objects will be
created here. One object creates memory in heap with new operator and
second in stack constant pool with "abc".
Q4. Which are the different segments of memory ?
Ans.
1. Stack Segment - contains local variables and Reference variables(variables that hold the address of an object in the heap)
2. Heap Segment - contains all created objects in runtime, objects only plus their object attributes (instance variables)
3. Code Segment - The segment where the actual compiled Java bytecodes resides when loaded
Q5. Which memory segment loads the java code ?
Ans. Code segment.
Q6. Does garbage collection guarantee that a program will not run out of memory?
Ans. Garbage collection
does not guarantee that a program will not run out of memory. It is
possible for programs to use up memory resources faster than they are
garbage collected. It is also possible for programs to create objects
that are not subject to garbage collection
Q7. Describe what happens when an object is created in Java ?
Ans.
1. Memory is allocated
from heap to hold all instance variables and implementation-specific
data of the object and its superclasses. Implemenation-specific data
includes pointers to class and method data.
2. The instance variables of the objects are initialized to their default values.
3. The constructor for
the most derived class is invoked. The first thing a constructor does is
call the constructor for its superclasses. This process continues until
the constructor for java.lang.Object is called,
as java.lang.Object is the base class for all objects in java.
4. Before the body of
the constructor is executed, all instance variable initializers and
initialization blocks are executed. Then the body of the constructor is
executed. Thus, the constructor for the base class completes first and
constructor for the most derived class completes last.
Q8. Describe, in general, how java's garbage collector works ?
Ans. The Java runtime
environment deletes objects when it determines that they are no longer
being used. This process is known as garbage collection. The Java
runtime environment supports a garbage collector that periodically frees
the memory used by objects
that are no longer needed. The Java garbage collector is a mark-sweep
garbage collector that scans Java's dynamic memory areas for objects,
marking those that are referenced. After all possible paths to objects
are investigated, those objects that are not marked (i.e. are not
referenced) are known to be garbage and are collected.
Q9. Can I import same package/class twice? Will the JVM load the package twice at runtime?
Ans. One can import the
same package or same class multiple times. Neither compiler nor JVM
complains wil complain about it. And the JVM will internally load the
class only once no matter how many times you import the same class.
Q10. Different types of memory used by JVM ?
Ans. Class , Heap , Stack , Register , Native Method Stack.
Q11. What is a class loader ? What are the different class loaders used by JVM ?
Ans. Part of JVM which is used to load classes and interfaces.
Bootstrap , Extension and System are the class loaders used by JVM.
Q12. Explain java.lang.OutOfMemoryError ?
Ans. This Error is
thrown when the Java Virtual Machine cannot allocate an object because
it is out of memory, and no more memory could be made available by the
garbage collector.
Q13. Is JVM, a compiler or interpretor ?
Ans. Its an interpretor.
Q14. Difference between loadClass and Class.forName ?
Ans. loadClass only
loads the class but doesn't initialize the object whereas Class.forName
initialize the object after loading it.
Q15. Should we override finalize method ?
Ans. Finalize is used by
Java for Garbage collection. It should not be done as we should leave
the Garbage Collection to Java itself.
Q16. Which kind of memory is used for storing object member variables and function local variables ?
Ans. Local variables are stored in stack whereas object variables are stored in heap.
Q17. Why do member variables have default values whereas local variables don't have any default value ?
Ans. member variable are
loaded into heap, so they are initialized with default values when an
instance of a class is created. In case of local variables, they are
stored in stack until they are being used.
Q18. Why Java don't use pointers ?
Ans. Pointers are
vulnerable and slight carelessness in their use may result in memory
problems and hence Java intrinsically manage their use.
Q19. What are various types of Class loaders used by JVM ?
Ans.
Bootstrap - Loads JDK internal classes, java.* packages.
Extensions - Loads jar files from JDK extensions directory - usually lib/ext directory of the JRE
System - Loads classes from system classpath.
Q20. How are classes loaded by JVM ?
Ans. Class loaders are
hierarchical. The very first class is specially loaded with the help of
static main() method declared in your class. All the subsequently loaded
classes are loaded by the classes, which are already loaded and
running.