• Understanding the JVM


    The aim to write this blog is that I want to summerize and NOTE what I have learned with the booked called as

    Understanding the JVM Advandced features and Best prac

      
    Now it's the first chapter reviews : 

      • This chapter didn't talk much ,just the history and future of technology in java system, also kinds of virtual macine(VM) 

      > what i deeply remembered is the version of my java VM ,because i teste it specially.

      

      u can see my version of VM is hotspot VM with mixed mode and it is usually common of java developer 

    It's the time to revise the second chapter:

      •  In this chapter , i pick up lots of knowledge about VM 

        > the VM memories to be allocated particular data. ↓

        

        > next i will tell the detail function of these memories

          No1. program count register (pcr)

            function : to control the next bit code which will be launched , such as the loop and jump, branch, some exceptions...

            private : because java VM's multithreading ,so every threading will has it's own pcr to make sure every single pcr work 

           No2. VM Stack and Native Stack -- In HotSpot, these two stacks are the one stack.

            function : purpose of stack is to describe the model launched in java or native methods --  every method begin to

                   launch that means one thread starts with VM stack being set up, where there are the specific part vairables, such

                  as (the basic type od variable) long, double and reference...

            private : every method has it's own form of specific part variables

            potential error : if the part variables are confirmed before launched, and u want apply more memories in stack, and then u will get 

                      stackOverflowError... but if VM stack can be extend dynamicly(now most VM stack can make it) things are different

                      but if u can't apply more memories when u extend dynamicly , and u will get outOfMemoryError...

          No3. Heap -- the biggest area of memory 

             function : heap is the homeland of kinds of class instance,  basically all instance lived in heap, but with the JIT developing, not all the 

                   instance in heap, also the stack can do it.

             public : all the instance in the heap,  so threads can get the all instance. By the way, there are also called GC heap, because garbage collected

                  in this area divided into young_generation and old_generation

             potential error : java heap can be allocated in discontinuous physical area...so if there are not enough zone to allocate class instance,and this 

                      heap can't be extended , u will get outOfMemoryError

          No4. Method Area -- like the heap

             function : store up the information of class which has already been loaded by VM, the static variable, the constant,and code by JIT...

             public : this area can be extended or not, and what amazed me is that u can achieve non-GC, so it's also called premanent generation...

             potential error : OutOfMemoryError

         No5. Runtime Constant pool -- part of Method Area

              function : during the runtime, u also can put the constanrt into the constant pool...    

              example : see this blog . String : intern() which is used most in actually develop

                 http://www.cnblogs.com/AmoryWang-JavaSunny/p/6407996.html

        > then i will tell u how to visit the Object , and there are two ways to make it ...

        

        一般来说的虚拟机都是采用下面的直接访问的方法,因为这样节省时间一些,对于并发来说这就是一种客观的节约资源的方式,而上面的句柄池也有在用

       • situations of OOM 

        (1) java heap : where the class instance lived 

         (2) VM stack and native stack :

            - OOM

            - SOF     

          对于单线程来说,总是会出现sof情况,因为这两种在单线程方面来说就是一种情况,线程请求的栈空间大于虚拟机最大提供的空间,

          因为虚拟机无法再扩展更大的空间了,但是对于多线程来说,就不太一样,一般线程的栈空间越大,那么线程的数就会越少,剩下的

          空间很容易被线程整垮。。。如果出现了线程很多,但又不可避免的时候就要考虑减少最大堆或者栈空间,来确保多线程的运行,这种

          牺牲内存来成全线程的情况也是很牛的想法。。。

       

  • 相关阅读:
    使用django开发一个web项目初试
    关于github一些比较重要的命令
    删除github repository的方法
    Node、npm与Vue配置与问题记录
    [记忆]5月第二周
    git am patch冲突解决步骤
    git丢弃本地修改的几种方式
    Log4j 2.X 漏洞解决
    Maven依赖范围Scope及传递性依赖
    Mysql创建事件定时任务
  • 原文地址:https://www.cnblogs.com/AmoryWang-JavaSunny/p/6158460.html
Copyright © 2020-2023  润新知