1: Java technology system module diagram
2: JVM memory area model
#1. Method area
Also known as "permanent generation" and "non-heap", it is used to store class information, constants, static variables, etc. loaded by the virtual machine. Memory area shared by threadsRuntime constant pool: It is part of the method area. In addition to the description information such as the class version, fields, methods, interfaces, etc., the Class file also has a constant pool. Used to store various symbol references generated by the compiler. This content will be placed in the runtime constant pool in the method area after the class is loaded.. The default minimum value is 16MB and the maximum value is 64MB. You can limit the size of the method area through the -XX:PermSize and -XX:MaxPermSize parameters.
2. Virtual machine stack
describes the memory model of java method execution : When each method is executed, a "stack frame" will be created to store information such as local variable tables (including parameters), operation stacks, and method exits. The process from each method being called to the completion of execution corresponds to the process of a stack frame from being pushed into the stack to being popped out of the stack in the virtual machine stack. The declaration cycle is the same as the thread and isprivate to the threadThe local variable table stores various basic data types (boolean, byte, char, short, int, float, long, double) and object references (reference pointers) known to the compiler. Not the object itself), the 64-bit long and double type data will occupy the space of 2 local variables, and the other data types will only occupy 1. The memory space required for the local variable table is allocated during compilation. When entering a method, the size of the local variables that the method needs to allocate in the stack frame is completely determined. The stack frame will not change the size of the local variable table during runtime. space..
3. Local method stack
# is basically similar to the virtual machine stack. The difference is that the virtual machine stack is the java executed by the virtual machine. Method services, while the local method stack serves Native methods.
4. Heap
Also called java heap, GC heap is the largest memory managed by the java virtual machine A memory area, which is also A memory area shared by various threads, is created when the JVM starts. This memory area stores object instances and arrays (all new objects). The size is set by the -Xms (minimum value) and -Xmx (maximum value) parameters. -Xms is the minimum memory requested when the JVM starts. The default is 1/64 of the physical memory of the operating system but less than 1G. -Xmx is the maximum memory that the JVM can apply for. The default is 1/4 of the physical memory but less than 1G. The default is when the free heap memory is less than 40 %, the JVM will increase the Heap to the size specified by -Xmx. You can specify this ratio through -XX:MinHeapFreeRation=; when the free heap memory is greater than 70%, the JVM will reduce the size of the Heap to ## The size specified by #-Xms can be specified by XX:MaxHeapFreeRation=. For the running system, in order to avoid frequent adjustments to the Heap size during runtime, usually -Xms and -Xmx The values are set to the same .
Since collectors now use generational collection algorithms, the heap is divided into the new generation and the old generation. The new generation mainly stores newly created objects and objects that have not yet entered the old generation. The old generation stores objects that have survived multiple minor GCs.
New generation:
The newly created objects of the program are all from The new generation allocates memory. The new generation consists of Eden Space and two Survivor Spaces of the same size (usually also called S0 and S1 or From and To). The size of the new generation can be specified through the -Xmn parameter, or -XX: SurvivorRation to adjust the size of Eden Space and Survivor Space.
##Old generation:
is used to store objects that have survived multiple times of new generation GC, such as cache objects. Newly created objects may also directly enter the old generation. There are two main situations: ①. For large objects, you can set the startup parameter -XX:PretenureSizeThreshold=1024 (unit is bytes, default is 0) to indicate that when it exceeds the size, it will not be allocated in the new generation, but will be allocated directly in the old generation. ②. For large array objects, there are no external objects referenced in the array.
The memory size occupied by the old generation is the value corresponding to -Xmx minus the value corresponding to -Xmn.
5. Program counter
is the smallest memory area. Its function is the line number indicator of the bytecode executed by the current thread. In the virtual machine model, the bytecode interpreter works by changing the value of this counter. The next bytecode instruction that needs to be executed, basic functions such as branching, looping, exception handling, and thread recovery all need to rely on counters.
The above is the content of Java virtual machine learning - architecture memory model. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!