Java Memory Management

Java Memory Model

What’s in the memory of a running Java application?

Before we look into the details, we can guess that the following component is needed for an application to run:

  1. The code: Java code is not complied or executed in native code format, the code is converted into class file and executed through the execution engine. So the code must be loaded into the memory to execute.
  2. JVM: the Java Virtual Machine itself.
  3. Stack of the current thread, it stores current status of the execution, the running code, the local varaibles, and the trace of the execution.
  4. Data objects: when java code is run, the objects needs to be initiated to track he data, and they should not be in the stack area, therefore another area should be reserved fro the data objects.

We are pretty close with the Java memory model already with the above reasoning. Actually Java memory model has the following model:

  • Method area

this areas store all Java class level information, including the class name, it’s immediate parent class name. This area is one per JVM, and shared by different threads.

  • Heap area

this areas is used for all the objects that is instantiated. There is also one Heap Area per JVM. For example, all the static string lives on the Heap area so that they can be referred and shared.

  • Stack area

There is one running stack for each thread, each block is created as a new function is invoked.

  • PC Register

This area stores the address of current execution instruction of a thread. This is also one per thread.

Java GC

How does Java GC work?

Java program runs in Java Virtual Machine, Java Virtual Machine manages the memory allocation and recycle of the programs. In C/C++ programming, the program need to call alloc() and free() method to allocate and release the memories. JVM handles the memory allocation and recycle for the programs, it introduced the garbage collector for recycling the unused memories.

The most critical question is how does Java know whether the memory area is ready to be recycled? Java GC will scan the Stack area, if the object in the Heap is reachable from the stack, it means this object is still being referred and it should not recycle, otherwise, they area can be recycled.

What are some of the algorithms that Java GC use?

Mark and Sweep

In phase I of this algorithm, the Java GC traversal the heap area to decide which one is still reachable.

In phase II of this algorithm, the Java GC will mark the rest of the area as recyclable, and these areas will be overwrite next time a data allocation request is sent.

Does Java GC compacting the memory to improve the later on memory allocation performance? Yes, it does. The mark-compact algorithm would try to move the referred area to the start of the heap and so that the later on memory allocation is in a continuous chunk of area and the new allocation is faster.

The problem of Mark and Sweep algorithm is that is can become quite inefficient. If the objects size becomes big or the program becomes complex, traversal the diagram and clean them up could take a long time.

Generational Garbage Collection

Generational Garbage Collection is added on top of the Mark and Sweep algorithm. Most of the java objects are short lived, and if they are short lived, they most likely will leave forever.

Generational GC divides the Heap into a few areas: the younger generation, the old generation and the Permanent generation.

The objects are first allocated in the younger generation, which contains the eden, s1 and S2 area. If the size fills up, a minor GC is triggered to recycle the data, and if the objets survived, it is gradually pushed to older generation.

The old generation is used to store the long running objects, only when the object in the young generation reached certain age, they are added to the old generation. And a major GC is run to perform GC on old generation.

The permanent generation is used to store the metadata required for JVM to run, for example, the class file.

From Java 8 on, the permanent generation is removed and replaced with the metadata space, and method area is part of this area.

Java Memory Tuning

Java GC tpes

Java provides different types of GC:

  • The Serial GC

This is the default GC, and it runs in a single thread and in serial for different GC tasks.

  • The parallel GC

This GC runs in multiple thread and runs the GC in parallel.

  • The Concurrent Mark Sweep Collector

This GC is used to collect the tenured generation.

How do we tune java memory?

  • -Xmx: set the maximum heap size
  • -Xms: set the starting heap size
  • -XX:MaxPermSize: java 7 and below
  • -X:MetaspaceSize the meta space size.
  • -verbose:gc print to the console when a garbage collection is run.
  • -Xmn set the size of the young generation
  • -XX: HeapDumpOnOutOfMemory create a heap dump file

Manager Trainning: Feedback and Hard Conversation

How do you give and ask for feedbacks? What’s your strategy for structuring the feedback so it is can be better received? What if your peer push back on your feedback?
One of the most interesting topic for becoming manager is the feedbacks. Your feedback has to be timely, be specific and be actionable. But in the mean time, the strategy for structuring the feedback is equally important.
One of the strategy is called SBI, where S stands for situation, B stands for Behavior, I stands for impact. It suggest you to structure your feedback into three parts:

  • On the Situation part, you share the situation where the behavior is captured.
  • On the behavior part, you share the behaviors which you think could be improved.
  • On the impact part, you share the impact of these unexpected behavior.

SBI structure helps you focus on the behavioral feedbacks, on the examples and on the impact. And of course, you should expect push back from the other side about your feedback many times. In these situations, try to stand your ground. Remember, it’s not your job to please someone, it’s your job to communicate clearly what’s the expected behavior of someone. 
SBI can also be used on the hard conversations, for example, performance improvement plan. For hard conversation, it is suggested that we don’t try to avoid the real topic by having hiding agendas. It is better to directly shares with the other party that you have will some hard conversation with them and what is your concern. Then you share the SBI of these behaviors and ask for the perspective .
It is very common that you would receive push back during hard conversations, people might come back to you for all different reasons. But you will need to remember to stand on your ground(again), and push it through. Some of the tips including send out document before hand and allow them to be digested, and try to use ‘and’ instead of but on your conversation. You need to let people know that you totally get their concern, but the behavior didn’t really match the expectation and is a problem for you.

Manager Tools Pod Cast: Prioritizing Your Relationship With Your Boss

  • No one is glad to be managed. So don’t try to manage your boss, but to prioritizing your relationship.
  • Three major topics
  • Communicate with your boss FIRST. Either good news or bad news, your boss don’t want to be the last person to know it. Communicate with your boss before you communicate with other people on the organization. Hearing the news about the organization from someone else make him/her feel bad, which hurts the relationship. 
  • Make changes when you get feedback. When directs get feedback, whether positive or negative feedback, consider strongly about making a feedback. If you blow off the feedback every time, people will stop sharing the feedback with you.
  • Maintain confidentiality: keep the confidential information your boss shared with you confidential. Don’t risk to ruin the trust.
  • Why does how my Boss feels matter: he/she controls your performance review, and the project you get.
  • Where the relationship comes from?  The little, daily things that built up the relationship, not the big things. 

MIT PoM 1: introduction to Microeconomics

  • Economics is all about scarcity and the constrained optimization, which means given certain constraints, how does individuals and firm trade off different alternatives to make the optimal choice. Actually, all engineering is about constraint optimization.
  • This course is going to be focusing on two types of actors, consumers and producers. And we are about to build models to explain the behavior of these actions. The models needs to be tractable and can explain the real world in reality.
  • Consumer are to optimize the utility, firms on the other hand, are going to optimize the profits.
  • Three are fundamental questions in microeconomics: what goods and services should be produced? How these goods and services are produced? Who should get these goods and services? Price will determine what get produced, how it’s produced, and who gets the goods that are produced. 
  • The first distinction: theoretical v.s. empirical economics. Theoretical economics is the process that build the models to explain the world, while empirical economics is the process of testing these models to see how good they could explain the world. 
  • Another distinction: positive v.s. normative economics. The way things are: positive economics, and things should be: normative economics. 
  • Supply + demand: water is important but has a large supply, diamond is not relevant to the life, but has a much lower supply, thus a much lower price.
  • Consumer theory: preference, constraints.