{"id":7576,"date":"2019-10-21T15:37:00","date_gmt":"2019-10-21T15:37:00","guid":{"rendered":"https:\/\/www.intexsoft.com\/?post_type=blog&#038;p=7576"},"modified":"2022-07-19T12:43:03","modified_gmt":"2022-07-19T12:43:03","slug":"tools-for-launching-and-developing-products-on-jvm","status":"publish","type":"blog","link":"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/","title":{"rendered":"Tools for Launching and Developing Products on JVM"},"content":{"rendered":"<section  class=\"hero hero-blog \">\n\t<div class=\"content\">\n\t\t\t\t\t<div class=\"hero__overlay\"><\/div>\n\t\t\t\t<div class=\"hero__container\">\n\t\t\t<a href=\"https:\/\/intexsoft.com\/blog\/\">\n\t\t\t\t<div class=\"hero-blog-btn\">\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\t\t\t<\/a>\n\t\t\t<div class=\"hero-blog-date-author\"> October 21, 2019 \u2022 by \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAndrew &amp;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tDora\n\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<h1 class=\"hero__title \">Tools for Launching and Developing Products on JVM<\/h1>\n\t\t\t\t\t\t\t\t\t\t<div class=\"hero-blog-categories\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"hero-blog-category\" data-id=\"22\" data-parent=\"18\">\n\t\t\t\t\t\t\tJava\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"hero-blog-category\" data-id=\"18\" data-parent=\"0\">\n\t\t\t\t\t\t\tTech Staff\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"hero-blog-image\">\n\t\t\t\t<picture>\n\t\t\t\t\t\t\t\t\t\t\t<source type=\"image\/webp\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/uploads-webp\/2021\/08\/360x510-Tools-for-Launching-and-Developing-Products-on-JVM-min.jpg.webp\" media=\"(max-width: 480px)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<source type=\"image\/webp\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/uploads-webp\/2021\/08\/768x773-Tools-for-Launching-and-Developing-Products-on-JVM-min.jpg.webp\" media=\"(max-width: 992px)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<source type=\"image\/webp\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/uploads-webp\/2021\/08\/1920x437-Tools-for-Launching-and-Developing-Products-on-JVM-min.jpg.webp\">\n\t\t\t\t\t\t\t\t\t\t<source srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/360x510-Tools-for-Launching-and-Developing-Products-on-JVM-min.jpg\" media=\"(max-width: 480px)\">\n\t\t\t\t\t<source srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/768x773-Tools-for-Launching-and-Developing-Products-on-JVM-min.jpg\" media=\"(max-width: 992px)\">\n\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/1920x437-Tools-for-Launching-and-Developing-Products-on-JVM-min.jpg\" loading=\"lazy\" alt=\"image\">\n\t\t\t\t<\/picture>\n\t\t\t<\/div>\n\t\t\t<\/div>\n<\/section>\n\t\t\t\t\t\t\t\n\t\t\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\"><section id=\"\"\n\t\t\t\t\t class=\"custom-wysiwyg-editor wysiwyg-portfolio \">\n\t\t<div class=\"content\">\n\n\n\n\t\t\t\t\t\t\t\n\t\t\t\t<div class=\"custom-wysiwyg-editor__anchors\">\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"itemHeader\"><\/div>\n<div class=\"itemBody\">\n<div id=\"post_full_text\" class=\"itemFullText\">\n<p><span style=\"color: #333333;\">It\u2019s no secret that Java is one of the most popular programming languages in the world right now. It was officially launched on May 23, 1995.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">This article is about the basics and fundamental tools of Java, that will come in handy for beginner Java developers, while senior developers will be able to brush up on their knowledge.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">JDK, JRE, JVM<\/span><\/h2>\n<p>&nbsp;<\/p>\n<div><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8809 size-full\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-1.jpg\" alt=\"\" width=\"670\" height=\"409\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-1.jpg 670w, https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-1-300x183.jpg 300w\" sizes=\"(max-width: 670px) 100vw, 670px\" \/><\/div>\n<div><\/div>\n<p><span style=\"color: #333333;\"><a style=\"color: #333333;\" href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/13\/docs\/specs\/man\/index.html\"><span style=\"color: #000080;\">Java Development Kit<\/span><\/a>\u00a0is the official development kit for building applications using the Java programming language. The Kit includes\u00a0<span style=\"color: #000080;\"><a style=\"color: #000080;\" href=\"https:\/\/docs.oracle.com\/javase\/6\/docs\/technotes\/tools\/index.html\">Java development tools<\/a><\/span>\u00a0and\u00a0<span style=\"color: #000080;\"><a style=\"color: #000080;\" href=\"https:\/\/www.javaworld.com\/article\/3304858\/what-is-the-jre-introduction-to-the-java-runtime-environment.html\" rel=\"nofollow\">Java Runtime Environment<\/a><\/span>.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Java development tools include around 40 different tools such as:\u00a0<em>javac<\/em>\u00a0(a compiler),\u00a0<em>java<\/em>\u00a0( launcher for Java applications),\u00a0<em>javap<\/em>\u00a0(class file disassembler),<em>\u00a0jdb<\/em>\u00a0(java debugger), and others.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Java Runtime Environment is a set of software tools needed to launch a compiled Java program. It includes\u00a0<span style=\"color: #000080;\"><a style=\"color: #000080;\" href=\"https:\/\/docs.oracle.com\/javase\/6\/docs\/technotes\/guides\/vm\/index.html\" rel=\"nofollow\">Java Virtual Machine<\/a><\/span>\u00a0and\u00a0<span style=\"color: #000080;\"><a style=\"color: #000080;\" href=\"https:\/\/en.wikipedia.org\/wiki\/Java_Class_Library\">Java Class Library<\/a><\/span>.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">JVM is a program responsible for the execution of a bytecode. The first advantage of the JVM is a so-called \u2018Write once, run anywhere\u2019 rule. It means that an app developed on Java will run on any platform. This is an advantage of both JVM and Java itself.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">There are many JVM implementations both commercial and open source. One of the reasons of creating new JVMs is to increase performance for a particular platform. Each JVM is developed for a platform separately. And there is an opportunity to develop the JVM so that it will work faster on a particular platform.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The most widespread JVM implementation is the JVM Hotspot by OpenJDK. There are also such implementations as IBM J9, Excelsior JET.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Code execution on JVM<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">According to<span style=\"color: #000080;\">\u00a0<a style=\"color: #000080;\" href=\"https:\/\/docs.oracle.com\/javase\/specs\/\">Java SE specifications<\/a><\/span>, you need to complete the 3 following stages to get a code running on the JVM:<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><b>Downloading<\/b>\u00a0a bytecode and creating a Class instance<\/span><\/p>\n<p><span style=\"color: #333333;\">Globally speaking, the class should be downloaded in order to access the JVM. There are special Java classloaders for this purpose, but we\u2019ll return to them a bit later.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">After the code is downloaded, the process of <strong>linking<\/strong> begins. Within this process, a bytecode is disassembled and checked. The process of linking is also divided into 3 steps:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><span style=\"color: #333333;\"><em>verification:<\/em> at this stage, the correctness of instructions, the possibility of stack overflow on a given code section, the compatibility of variable types are being checked; verification is done once for each class;<\/span><\/li>\n<li><span style=\"color: #333333;\"><em>preparation:<\/em> at this stage, according to the specifications, memory for static fields is allocated and their initialization is performed;<\/span><\/li>\n<li><span style=\"color: #333333;\"><em>resolution:<\/em> at this stage, permission of symbolic links happens (when we open files with the .class extension in a bytecode, here we see numerical values instead of symbolic links)<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><b>Initializing<\/b>\u00a0of the received Class object at the final stage, the \u0441lass we created is initialized, and the JVM begins its execution.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Java classloaders and their hierarchy<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Classloaders are special classes that are a part of the JVM.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">They load classes into Java memory and make them available for execution. The classloaders work with all classes: those that were written by us, and those that are directly needed for Java.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Imagine the situation, when you developed an app, and in addition to standard classes, there are lots of personalized classes. How will the JVM work? There is such a \u2018function\u2019 in Java, like lazy loading, which means that the class loading will be performed only when it is first referenced.<\/span><\/p>\n<p>&nbsp;<\/p>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8811 size-full\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-2.jpg\" alt=\"\" width=\"562\" height=\"394\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-2.jpg 562w, https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-2-300x210.jpg 300w\" sizes=\"(max-width: 562px) 100vw, 562px\" \/>\n<p style=\"text-align: center;\">\n<\/div>\n<\/div>\n<p><span style=\"color: #333333;\">The first classloader is the\u00a0<b>Bootstrap<\/b>. It is developed using C++<\/span><\/p>\n<p>&nbsp;<\/p>\n<div class=\"itemBody\">\n<div id=\"post_full_text\" class=\"itemFullText\">\n<p><span style=\"color: #333333;\"><b>Bootstrap<\/b>\u00a0is a basic classloader that loads all system classes from rt.jar archive. At the same time, there is a slight difference between loading classes from rt.jar and our classes. When the JVM loads classes from rt.jar, it doesn\u2019t perform all the verification stages, since the JVM is initially aware of the fact that classes from rt.jar are already verified. It means that you should not place any of your own files into that archive.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The next classloader is the\u00a0<b>Extension classloader<\/b>. It loads Java extension classes from jre\/lib\/ext folder. Let&#8217;s say, you want a certain class to load every time JVM starts. In order to enable it, you can copy a source class file to that folder, and it will be loaded automatically.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Another classloader is the\u00a0<b>System classloader<\/b>. It loads classes from the classpath we indicated when launching an application.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The process of classloading is performed by the following hierarchy:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\">First of all, we request a cache search of the System Classloader that contains the classes that were previously loaded;<\/span><\/li>\n<li><span style=\"color: #333333;\">If the class was not found in the System Classloader cache, we look for it in the cache of the Extension classloader;<\/span><\/li>\n<li><span style=\"color: #333333;\">If the class was not found in the Extension classloader cache, we request it in the Bootstrap loader cache.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">If the class was not found in the Bootstrap cache, Bootstrap tries to load this class. If the loading failed, the Bootstrap delegates loading to the Extension classloader. If the class is then loaded, it stays in the cache of the Extension classloader, and the class loading is complete.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Java class structure. Loading of Java classes<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Here we proceed directly to the structure of class files.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">One class written on Java is compiled into one file with the .class extension. If our Java file has several classes, it can be compiled into several files with the .class extension respectively, namely into bytecode files of these classes.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">All numbers, strings, class references, fields, and methods are stored in the\u00a0<em>\u0421onstant pool\u00a0<\/em>\u2013 the Meta space memory area. The class description is stored in the same area and contains a name, modificators, super-class, super-interfaces, fields, methods, and attributes. Attributes, in their turn, can contain any additional information.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Thus, when loading classes the following steps are performed:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\">reading or verification of format correctness of a class-file;<\/span><\/li>\n<li><span style=\"color: #333333;\">creating a class instance in the Constant pool area;<\/span><\/li>\n<li><span style=\"color: #333333;\">loading of super-classes and super-interfaces; if they are not loaded, the class itself won\u2019t be loaded either.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Bytecode execution on JVM<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">First of all, JVM can\u00a0<em>interpret\u00a0<\/em>a bytecode in order to execute it. Bytecode Interpretation is rather a slow process. During this process, an\u00a0<span style=\"color: #000080;\"><a style=\"color: #000080;\" href=\"https:\/\/en.wikipedia.org\/wiki\/Interpreter_(computing)\" rel=\"nofollow\">interpreter<\/a><\/span>\u00a0\u201cruns\u201d through the class-file line by line, and translates it into commands understandable by the JVM.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The JVM can also\u00a0<em>translate\u00a0<\/em>(or compile) a bytecode into a machine code, that will be directly executed on the computer\u2019s processor.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Commands that are executed frequently, won\u2019t be interpreted, they will be translated automatically.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Compilation<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><b>The Compiler<\/b>\u00a0is a programme that translates a source code from a high-level programming language to a machine code understandable for a computer.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Compilers are divided into:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em><span style=\"color: #333333;\">Non optimizing<\/span><\/em><\/li>\n<li><span style=\"color: #333333;\"><em>Simple optimizing compilers<\/em>\u00a0(e.g.\u00a0<em>Hotspot Client<\/em>): works fast, but generates non-optimal code;<\/span><\/li>\n<li><span style=\"color: #333333;\"><em>Complex optimizing compilers<\/em>\u00a0(e.g.\u00a0<em>Hotspot Server<\/em>): performs complex optimizing transformations before generating a bytecode.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Compilers can be also divided by the moment of compilation:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em><span style=\"color: #333333;\">Dynamic or Just-In-Time compilers<\/span><\/em><br \/>\n<span style=\"color: #333333;\">They work along with the program, thereby affecting its performance. It\u2019s important for dynamic compilers to work on code that is executed frequently. During the program\u2019s execution, JVM understands, which particular code is executed more often, and to avoid constant interpretation of this code, the virtual machine translates it into commands, that will be directly executed on the processor.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li><em><span style=\"color: #333333;\">Static compilers<\/span><\/em><br \/>\n<span style=\"color: #333333;\">While the compiling process is performed for a longer period, static compilers generate the optimized code for its execution. Static compilers do not need any resources during the execution of a program and each method is compiled using optimizations.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Java memory management<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The\u00a0<b>Stack<\/b>\u00a0is a temporary memory space in Java. Stack memory is always referenced in LIFO order \u2013 \u201clast in, first out\u201d.<\/span><\/p>\n<p>&nbsp;<\/p>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8813 size-full\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-3.jpg\" alt=\"\" width=\"498\" height=\"446\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-3.jpg 498w, https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-3-300x269.jpg 300w\" sizes=\"(max-width: 498px) 100vw, 498px\" \/>\n<p><span style=\"color: #333333;\">The Stack is needed to store methods. Variables in the stack are stored until the method they were created in will execute.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">When a new method is invoked, a new frame of memory will be created on the top of the Stack. As soon as method ends, that block will be erased. The next method invoked will use that empty block. If the stack memory is full, Java will throw a\u00a0<em>xjava.lang.StackOverFlowError<\/em>\u00a0exception. For example, this can occur if there is a recursive function that invokes itself, and the Stack memory has overflowed.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Key Stack features:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\">Stack is filled in and cleaned up as new methods are invoked and completed<\/span><\/li>\n<li><span style=\"color: #333333;\">Access to this memory is considerably fast when compared to heap memory<\/span><\/li>\n<li><span style=\"color: #333333;\">The size of the Stack is defined by the OS<\/span><\/li>\n<li><span style=\"color: #333333;\">This memory is thread-safe as each thread operates in its own stack<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Another memory space in Java is the\u00a0<b>Heap<\/b>. It is used to store objects and classes. New objects are always created in the Heap, while references to these objects are stored in the Stack. Objects stored in the Heap are globally accessible, it means that they can be accessed throughout the application.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The Heap is divided into several parts called generations:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\"><em>Young generation<\/em>\u00a0is a field, where recently created objects are stored;<\/span><\/li>\n<li><span style=\"color: #333333;\"><em>Old (tenured) generation<\/em>\u00a0is a field, where long-life objects are stored;<\/span><\/li>\n<li><span style=\"color: #333333;\">Before Java 8, there was one more memory space &#8211; Permanent generation. it contained meta-information about classes, methods, statistical variables. After Java 8 was invented, all this information then became stored separately in the Metaspace.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8814 size-full\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-4.jpg\" alt=\"\" width=\"682\" height=\"357\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-4.jpg 682w, https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-4-300x157.jpg 300w\" sizes=\"(max-width: 682px) 100vw, 682px\" \/>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Why was the decision taken to get rid of Permanent generation? First of all, it was because of the error connected with memory overflow. Since the Perm had a constant size and could not expand dynamically, sooner or later the memory ran out, an error was thrown and application crashed.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">In contrast, Metaspace has a dynamic size, and during its execution, it can expand up to the memory size of the JVM.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Key Heap features:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\">If Heap space is full, Java throws <em>java.lang.OutOfMemoryError<\/em><\/span><\/li>\n<li><span style=\"color: #333333;\">Access to the Heap is relatively slower in comparison to the Stack<\/span><\/li>\n<li><span style=\"color: #333333;\">To remove unused objects from the memory in the Heap, a Garbage collector is used<\/span><\/li>\n<li><span style=\"color: #333333;\">Unlike stack, a heap isn&#8217;t thread-safe and needs to be guarded by properly synchronizing the code<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Based on the information above, let\u2019s take a look at the process of memory management with a simple example:<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"blog-code\"><span style=\"color: #333333;\">public class App {\r\n    public static void main(String[] args) {\r\n        int id = 23;\r\n        String pName = \"Jon\";\r\n        Person p = null;\r\n        p = new Person(id, pName);\r\n    }\r\n}\r\nclass Person {\r\n    int pid;\r\n    String name;\r\n    \r\n    \/\/ constructors, getters\/setters\r\n}\r\n<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Now, let&#8217;s analyze this step by step:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li><span style=\"color: #333333;\">Upon entering the <em>main()<\/em>\u00a0method, a space in stack memory would be created to store primitives and references of this method:<\/span><\/li>\n<\/ol>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><span style=\"color: #333333;\">The primitive value of the integer\u00a0<em>id<\/em>\u00a0will be stored directly in the stack memory<\/span><\/li>\n<li><span style=\"color: #333333;\">The reference variable\u00a0<i>p<\/i>\u00a0of the type\u00a0<em>Person<\/em>\u00a0will also be created in the stack memory, which will point to the actual object in the heap<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">2. The call to the parameterized constructor <em>Person(int, String)<\/em>\u00a0from\u00a0<em>main()<\/em>\u00a0will allocate further memory on top of the previous stack. This will store:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><span style=\"color: #333333;\"><i>This<\/i>\u00a0object reference of the calling object in stack memory<\/span><\/li>\n<li><span style=\"color: #333333;\">The primitive value\u00a0<em>id<\/em>\u00a0in the stack memory<\/span><\/li>\n<li><span style=\"color: #333333;\">The reference variable of String argument\u00a0<em>personName<\/em>\u00a0which will point to the actual string from the string pool in the heap memory<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">3. This default constructor is further calling <em>setPersonName()<\/em>\u00a0method, for which further allocation will take place in stack memory on top of the previous one. This will again store variables in the manner described above.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">4. However, for the newly created object <i>p<\/i>\u00a0of type\u00a0<em>Person<\/em>, all instance variables will be stored in the heap memory<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">This allocation is explained in the following diagram:<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8815 size-full\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-5.jpg\" alt=\"\" width=\"911\" height=\"542\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-5.jpg 911w, https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-5-300x178.jpg 300w, https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-5-768x457.jpg 768w\" sizes=\"(max-width: 911px) 100vw, 911px\" \/><\/span><\/p>\n<h4><\/h4>\n<h2><span style=\"color: #000000;\">Garbage collection in Java<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><span style=\"color: #000080;\"><a style=\"color: #000080;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/vm\/gctuning\/collectors.html\">Garbage collector<\/a><\/span>\u00a0is a programme that works in JVM and is intended to delete objects that are no longer used or needed.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Different JVMs can have different algorithms of garbage collection, so there are a variety of different garbage collectors in Java.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Right now, we will talk about the simplest garbage collector \u2013 Serial GC. In order to request a garbage collecting process, we use the\u00a0<em>System.gc()<\/em>\u00a0command.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8816 size-full\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-6.jpg\" alt=\"\" width=\"665\" height=\"244\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-6.jpg 665w, https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-6-300x110.jpg 300w\" sizes=\"(max-width: 665px) 100vw, 665px\" \/><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">As already mentioned, the Heap memory is divided into 2 sections called Generations: New generation and Old generation.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">New generation includes 3 regions:\u00a0<em>Eden, Survivor 0, and\u00a0Survivor 1.<\/em><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Old generation includes\u00a0<em>the Tenured\u00a0<\/em>region.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">So what happens when we create a new object in Java?<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">First of all this object goes to the\u00a0<em>Eden<\/em>. If we have created a lot of objects and there is no more memory for new objects, the garbage collector is triggered and frees up memory: it cleans up the\u00a0<em>Eden<\/em>\u00a0region and relocates all surviving objects to the\u00a0<em>Survivor 0<\/em>\u00a0region. Thus, the<em>\u00a0Eden<\/em>\u00a0is completely cleaned.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">If the\u00a0<em>Eden\u00a0<\/em>was filled with new objects again, the garbage collector begins to work with both\u00a0<em>Eden<\/em>\u00a0region and\u00a0<em>Survivor 0<\/em>\u00a0region. After the collection, the surviving objects will go to another region \u2014\u00a0<em>Survivor 1<\/em>, while the two other regions will remain empty.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">During the following garbage collection, the\u00a0<em>Survivor<\/em><i> 0<\/i>\u00a0region will be chosen as a target region again.This is why it&#8217;s important that with one of the regions \u2013 <em>Survivor 0<\/em> or <em>Survivor 1<\/em> \u2013 is always empty.<\/span><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8817 size-full\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-7.jpg\" alt=\"\" width=\"665\" height=\"401\" data-wp-editing=\"1\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-7.jpg 665w, https:\/\/intexsoft.com\/app\/uploads\/2019\/10\/jdk-7-300x181.jpg 300w\" sizes=\"(max-width: 665px) 100vw, 665px\" \/>\n<p>&nbsp;<\/p>\n<div class=\"itemBody\">\n<div id=\"post_full_text\" class=\"itemFullText\">\n<p><span style=\"color: #333333;\">JVM monitors the objects that are constantly copied and relocated from one region to another. So, in order to optimize this mechanism, after a certain threshold, the garbage collector moves such objects to the\u00a0<em>Tenured<\/em>\u00a0region.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">When the Tenured region has overflowed,\u00a0<em>Mark-Sweep-Compact\u00a0<\/em>or full garbage collection happens.<\/span><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Summarizing<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">In this article we covered basic tools of Java: JVM, JRE, JDK, the main principles and stages of code execution on JVM, compilation, memory management, and garbage collection mechanism.<\/span><\/p>\n<div id=\"post_full_text\" class=\"itemFullText\">\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">During this mechanism, the Tenured region is cleaned from unused objects and is defragmented, i.e. sequentially filled with necessary objects.<\/span><\/p>\n<\/div>\n<\/div>\n\n\t\t<\/div>\n\t<\/section>\n\n\n\n<section id=\"\" class=\"authors \">\n\t\t<div class=\"content\">\n\t\t\t<div class=\"authors-container\">\n\t\t\t\t\t\t\t\t\t<h3 class=\"authors-title\">Written by<\/h3>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"authors-info\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-photo\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/07\/Andrew.jpg\" loading=\"lazy\" alt=\"image\">\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-info\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"author-fullname\"> Andrew<\/h4>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-position text-tn\"> Head of Dev Department<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-photo\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/07\/Darya.jpg\" loading=\"lazy\" alt=\"image\">\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-info\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"author-fullname\"> Dora<\/h4>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-position text-tn\"> Marketing Manager<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t<\/section>\n\n\n<div class=\"post__share-links\">\n\t\t<div class=\"post__share-container\">\n\t\t\t\t\t\t\t<a class=\"post__share-link\" href=\"https:\/\/www.facebook.com\/sharer.php?u=http:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog\/7576&amp;t=Tools for Launching and Developing Products on JVM\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"post__share-link-img facebook-white\"><\/span>\n\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<a class=\"post__share-link\" href=\"http:\/\/www.linkedin.com\/shareArticle?mini=true&amp;url=http:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog\/7576\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"post__share-link-img linkedin-white\"><\/span>\n\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><\/div>\n<\/div>\n\n\n<section id=\"\" class=\"related-posts  \">\n\t\t<div class=\"content\">\n\t\t\t\t\t\t\t<h2 class=\"section-title\">Related Posts<\/h2>\n\t\t\t\t\t\t<ul class=\"posts-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/intexsoft.com\/blog\/8-best-popular-projects-on-java\/\" class=\"our-blog__block-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-image\">\n\t\t\t\t\t\t\t\t\t\t<picture>\n\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/640x400-8-Best-Popular-Projects-on-Java-min.jpg\" loading=\"lazy\" alt=\"image\" width=\"446\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t height=\"278\">\n\t\t\t\t\t\t\t\t\t\t<\/picture>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-date\">June 9, 2020<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h3 class=\"our-blog__block-item-content-title\">8 Best Popular Projects on Java<\/h3>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-subtitle\"> <p>Today, according to reliable publicly available sources, Java remains\u00a0one of the most popular\u00a0programming languages. Java developers are always in demand.<\/p> <\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/intexsoft.com\/blog\/python-vs-java-what-and-where-to-use\/\" class=\"our-blog__block-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-image\">\n\t\t\t\t\t\t\t\t\t\t<picture>\n\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/640x400-Python-vs-Java_-what-and-where-to-use-min.jpg\" loading=\"lazy\" alt=\"image\" width=\"446\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t height=\"278\">\n\t\t\t\t\t\t\t\t\t\t<\/picture>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-date\">December 4, 2019<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h3 class=\"our-blog__block-item-content-title\">Python vs Java: what and where to use<\/h3>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-subtitle\"> <p>Python\u00a0and\u00a0Java\u00a0have been struggling for a leading position among the most popular programming languages for quite a while. Python has recently caught a lot of popularity.<\/p> <\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/intexsoft.com\/blog\/10-java-frameworks-for-web-applications-what-to-use-in-2020\/\" class=\"our-blog__block-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-image\">\n\t\t\t\t\t\t\t\t\t\t<picture>\n\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/640x400-10-Java-Frameworks-for-Web-Applications_-What-to-Use-in-2020-min.jpg\" loading=\"lazy\" alt=\"image\" width=\"446\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t height=\"278\">\n\t\t\t\t\t\t\t\t\t\t<\/picture>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-date\">June 9, 2020<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h3 class=\"our-blog__block-item-content-title\">10 Java Frameworks for Web Applications: What to Use in 2020<\/h3>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-subtitle\"> <p>Any framework is one of the tools that help to develop software solutions faster and better. The basic principle of a framework is not having to reinvent the wheel.<\/p> <\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/ul>\n\t\t<\/div>\n\t<\/section>\n","protected":false},"author":1,"template":"","blog_category":[22,18],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.9 (Yoast SEO v22.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Tools for Launching and Developing Products on JVM - IntexSoft<\/title>\n<meta name=\"description\" content=\"This article is about the basics and fundamental tools of Java, that will come in handy for beginner Java developers.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tools for Launching and Developing Products on JVM\" \/>\n<meta property=\"og:description\" content=\"This article is about the basics and fundamental tools of Java, that will come in handy for beginner Java developers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/\" \/>\n<meta property=\"og:site_name\" content=\"IntexSoft\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-19T12:43:03+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Tools for Launching and Developing Products on JVM - IntexSoft","description":"This article is about the basics and fundamental tools of Java, that will come in handy for beginner Java developers.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/","og_locale":"en_US","og_type":"article","og_title":"Tools for Launching and Developing Products on JVM","og_description":"This article is about the basics and fundamental tools of Java, that will come in handy for beginner Java developers.","og_url":"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/","og_site_name":"IntexSoft","article_modified_time":"2022-07-19T12:43:03+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/","url":"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/","name":"Tools for Launching and Developing Products on JVM - IntexSoft","isPartOf":{"@id":"https:\/\/intexsoft.com\/#website"},"datePublished":"2019-10-21T15:37:00+00:00","dateModified":"2022-07-19T12:43:03+00:00","description":"This article is about the basics and fundamental tools of Java, that will come in handy for beginner Java developers.","breadcrumb":{"@id":"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/intexsoft.com\/"},{"@type":"ListItem","position":2,"name":"Tools for Launching and Developing Products on JVM"}]},{"@type":"WebSite","@id":"https:\/\/intexsoft.com\/#website","url":"https:\/\/intexsoft.com\/","name":"IntexSoft","description":"...","publisher":{"@id":"https:\/\/intexsoft.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/intexsoft.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/intexsoft.com\/#organization","name":"IntexSoft","url":"https:\/\/intexsoft.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/intexsoft.com\/#\/schema\/logo\/image\/","url":"https:\/\/intexsoft.com\/app\/uploads\/2021\/05\/Logo.png","contentUrl":"https:\/\/intexsoft.com\/app\/uploads\/2021\/05\/Logo.png","width":156,"height":33,"caption":"IntexSoft"},"image":{"@id":"https:\/\/intexsoft.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog\/7576"}],"collection":[{"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/media?parent=7576"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog_category?post=7576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}