JVM

JVM组成

 

 

使用Java语言编写.java Source Code文件,通过javac编译成.class Byte Code文件。
class loader类加载器:将所需的类加载到内存,必要时将类实例化成实例。
图中中间部分是进程的内存逻辑结构,称为Jvm运行时区域,由下面几部分构成: 方法区:所有线程共享的内存空间,存放已加载的类信息、常量和静态变量。 heap堆:所有线程共享的内存空间,存放创建的所有对象。堆是靠GC垃圾回收器管理的。 Java栈:每个线程会分配一个栈,存放线程用的本地变量、方法参数和返回值等。 PC寄存器:PC, 即Program Counter,每一个线程用于记录当前线程正在执行的字节码指令地址。因为线程需要切换,当一个线程被切换回来需要执行的时候,知道执行到哪里了。 本地方法栈:为本地方法执行构建的内存空间,存放本地方法执行时的局部变量、操作数等。
所谓本地方法,简单的说是非Java实现的方法,例如操作系统的C编写的库提供的本地方法,Java调用这些本地方法接口执行。但是要注意,本地方法应该避免直接编程使用,因为Java可能跨平台使用,如 果用了Windows API,换到了Linux平台部署就有了问题。

  

分代堆内存 
Heap堆内存分为
新生代:刚刚创建的对象
  伊甸园区
  存活区Servivor Space:有2个存活区,一个是from区(图中s0或s1),一个是to区。它们大小相等、地位相同、可互换。 to指的是本次复制数据的目标区
老年代:长时间存活的对象
持久代:JVM的类和方法

  

内存调整

-X选项 稳定的选项
-XX:选项名称 beta选项,但是有些就一直保留下来了
 
参数      说明        举例
-Xms      设置应用程序初始使用的堆内存大小(新生代+老年代)                               -Xms2g
-Xmx      设置应用程序能获得的最大堆内存早期JVM不建议超过32G,内存管理效率下降    -Xms4g
-XX:NewSize      设置初始新生代大小
-XX:MaxNewSize    设置最大新生代内存空间
-XX:NewRatio       以比例方式设置新生代和老年代    -XX:NewRatio=2new/old=1/2
XX:SurvivorRatio    以比例方式设置eden和survivor           -XX:SurvivorRatio=6  eden/survivor=6/1  survivor/new=1/8
-Xss:设置线程的栈大小
 
 
在bin/catalina.sh中增加
JAVA_OPTS="-server -Xmx512m  -Xms128m   -XX:NewSize=48m   -XX:MaxNewSize=200m" 

 

 

 

posted @ 2022-08-09 17:17  yuanbangchen  阅读(35)  评论(0编辑  收藏  举报