01 Understand the Correct Posture of Reading This Column

01 Understand the Correct Posture of Reading This Column #

Background of the Course #

In recent years, Java has rightfully earned its reputation as an unbeatable king among backend development languages in terms of usage scale, number of developers, maturity of the technical ecosystem, and richness of related tools. It is also the preferred language for developing various business systems.

Even today, Java developers remain in high demand, with the largest job market gap and the highest number of job opportunities in the entire IT recruitment market. Furthermore, looking at the overall market environment, there is still significant room for the informatization of traditional enterprises and the internetization of traditional IT systems. Therefore, it can be inferred that the future market prospects for Java development are broad, and the industry dividend for practitioners can continue for a long time.

According to the authoritative TIOBE programming language rankings data in November 2019, Java’s popularity has consistently ranked first.

1c91b731-e86d-4b59-85b6-8b7ec53e87d6.jpg

4fead80b-dc2e-4c40-852f-c4bd22bab207.jpg

The proportion of recruitment positions according to statistics from Lagou.com in September 2019 also shows that Java and JavaScript are the highest, although the difficulty of finding a job in Java is only 1/7 of JavaScript.

f5b072d7-2235-4814-ac63-3e90f0633629.jpg

On average, there are 4 people competing for a Java position, while JavaScript has 28, and Perl is the most extreme, with over 30.

d70b22b6-177c-443e-8ef1-957531028c60.jpg

According to statistics from Zhiyou.com, the average salary for Java programmers in cities such as Beijing, Shanghai, Hangzhou, and Shenzhen ranges from 16-21K, and in cities such as Guangzhou, Chengdu, Suzhou, and Nanjing, the average income is 11K-13K, far exceeding the average income level of other industries.

fd19dbb9-87e6-40bd-9d67-4455f1ee2513.jpg

Therefore, learning Java is currently a very advantageous career development choice.

Understanding the JVM is an essential part of learning Java in depth and is a stepping stone for Java developers to reach a higher level. We not only need to be able to write Java code to build systems, but also understand how to analyze and interpret what happens inside a Java program when it runs, and how to make it run better.

Just like to become an experienced driver, it is not enough to simply know how to drive a car. When you drive for a long time, there will always be some big and small faults. A good driver needs to know what phenomena indicate what problems and how to deal with them; otherwise, it will lead to frequent breakdowns, affecting our journey.

This course is designed to teach us how to understand the principles of the JVM, an excellent racing car, and how to use various tools to analyze and repair it.

Course Features #

Although there is a wealth of JVM-related information on the market, there are obviously two extremes: either too difficult to understand or focused on specific technical skills without being systematic. At the same time, major companies are also paying increasing attention to promoting and developing JVM-related technologies, and technical interviews at top-tier companies now include JVM knowledge as a required subject.

In this context, we have comprehensively organized and systematized the knowledge and experience of learning the JVM, including the technical aspects and memory model of the JVM, JVM parameters and built-in tools, GC algorithms, troubleshooting and analysis of GC logs, memory, and threads, as well as in-depth analysis of common interview questions and practical methods. This course not only meets the need for rapid and systematic learning and comprehensive mastery of knowledge but also takes into account the coaching of interview experiences.

  • Through systematic learning, understand general principles and rationale.
  • Familiarize yourself with tools and solutions, know where to start and how to analyze and solve problems at work.
  • Deepen understanding through course demonstrations and exercises, enabling everyone to integrate and apply the knowledge regardless of their previous foundation.
  • The analysis part of interview questions will be continuously updated based on feedback, providing long-term assistance to everyone’s learning and progress.

The features of this course can be summarized in 16 words:

Complete system, clear hierarchy, in-depth and easy to understand, with an emphasis on practice

Why Create this Course #

Recently, someone asked me why, as a programmer, I focus on creating a column about the JVM that leans towards basics and practical applications, rather than one that delves into the internal implementation details of the JVM or complex algorithm principles.

Here, I would like to share my thoughts on this question:

Personally, I have always believed that technology should have two aspects: a small group of people should focus on cutting-edge, theory-based research, while the majority should apply technology to practical work, improve efficiency, and enhance productivity. This also aligns with a quote often mentioned by technology expert Shi Haifeng, who says that an architect should be an idealistic pragmatist.

Therefore, in this course, we will only present what should be useful to everyone’s work and other aspects, practical things that are down-to-earth. Whether it is technical points or experience sharing, although there will be a small amount of forward-looking introductions and prospects, the main focus will be on basics and practical applications. Some time ago, I listened to a lecture by Mr. Fan Deng online, where he mentioned the differences between Eastern and Western teaching methods. In China, we tend to teach and impart knowledge in a way that emphasizes enlightenment. The teachings of Confucius and Laozi are highly regarded, and their words can often be profound and difficult to comprehend. If you have enlightenment, you can understand the truth, but if you don’t, it means you need to work harder.

In contrast, the West, starting from Socrates, Plato, and Aristotle, prefers to use logic. They break down knowledge into steps, and if they find the first step to be imperfect, they improve it before moving on to the second and third steps. This way, their knowledge system becomes more refined and closer to the truth. Moreover, this method can be replicated.

Therefore, our company’s technical committee organized several sessions of “Knowledge + Practice” courses, each lasting 4-6 lessons and 2 hours per lesson, with frontline technical personnel in our R&D team. The courses received good results and positive feedback.

Coincidentally, during the internal training, the course “Introduction to JVM Fundamentals” was organized by me and Fu Fei. Fu Fei has translated and written many technical articles and blogs on JVM in his past work experience and has accumulated a wealth of firsthand experience and techniques in JVM.

Knowledge is better shared than kept to oneself. The value of knowledge is limited if only one person possesses it. Even with internal training within the company, we can only impact a hundred or so participants. If we organize the contents of JVM in a more comprehensive way, integrate various issues that everyone in the industry is concerned about, and turn it into an open course, we can reach more people and create greater value. This will be beneficial to all parties involved, a win-win situation (this is also what Mr. Shi said in the first half of that sentence, “having lofty ideals”).

Based on these reasons, everyone agreed and thus this course was created. We believe that this course will definitely not disappoint.

Course Content #

This course is divided into two parts. The Basics section mainly introduces the fundamentals of JVM and various tools related to JDK. The In-Depth Analysis section explains various GC algorithms, how to analyze and diagnose various metrics of JVM, such as GC logs, threads, and memory, and combines the author’s practical analysis and optimization experience, as well as analysis and answers to common JVM interview questions. It provides learners with a clear understanding of the overall knowledge framework of JVM and brings the most comprehensive first-hand experience and practical techniques on JVM.

In this sharing session, you will learn the following topics (22 lessons in total):

avatar

Basics Section #

  1. Environment preparation: A journey of a thousand miles begins with a single step
  2. Common performance metrics: No quantification, no improvement
  3. JVM basics: Accumulate steps and eventually reach a thousand miles
  4. Java bytecode technology: Accumulate tiny streams, eventually forming great rivers
  5. JVM class loader: A mountain doesn’t reject soil, so it can rise high
  6. JVM memory model: The ocean doesn’t reject water, so it can be deep
  7. Detailed explanation of JVM startup parameters: Broad knowledge and concise selection, thick accumulation and efficient release
  8. Introduction to built-in command-line tools in JDK: To do a good job, one must first sharpen one’s tools
  9. Introduction to built-in graphical tools in JDK: With a vast expanse of sea, fish can leap at will; with a high sky, birds can fly freely
  10. Introduction to JDWP: To kill a person from a thousand miles away, leave no trace
  11. JMX and related tools: The mountain is high, the moon is small, but the truth stands out

In-Depth Analysis Section #

  1. Introduction to common GC algorithms (Parallel/CMS/G1): Review the old to know the new
  2. Introduction to Java 11 ZGC and Java 12 Shenandoah: New things every day
  3. Introduction to Oracle GraalVM: See everything from a top point and all other mountains will seem small
  4. Understanding and analyzing GC logs: Though sieves may be used to separate grains of gold, it’s difficult to get rid of the sand without effort
  5. Analysis of JVM thread stack and other data: Play many tunes before you can hear a sound; observe thousands of swords before you can recognize a good one
  6. Memory dump and memory analysis tools: Go thousands of miles to join the battle, crossing mountains and rivers in flight
  7. Introduction to related tools for fastthread: To understand things a thousand miles away, climb one story higher
  8. Several advanced tools for solving complex problems: The stone from another mountain may serve as a weapon to attack jade
  9. Experience in troubleshooting, analysis, and optimization of JVM problems: Knowledge gained from reading is shallow, true understanding requires personal experience
  10. Summary of common JVM interview questions: Strategizing behind closed doors ensures victory thousands of miles away
  11. Facing the challenges of the container era: Great waves are born from small ripples and only those with great determination can ride the waves

Final Words #

As the saying goes, “live and learn.” The IT industry develops and innovates at a rapid pace, and new knowledge quickly becomes old knowledge, and new techniques quickly become outdated. Only through continued learning can we adapt to the development of technology itself. At the same time, with the development of the internet, especially with the emergence of various new content platforms and media, it’s not that there is too little information, but rather too much.

The information explosion has increased the cost of filtering useful information. In such circumstances, choosing the right learning path and content becomes just as important as learning methods. Systematic summarization of experience and knowledge dissemination have become equally important.

Let’s continue learning on the GitChat platform, work together with like-minded colleagues, and make progress together.