1.关于JAVA内存模型
JAVA内存模型是Java的基础,每个开发人员都需要对其有一定的了解。 只有更好地理解底层的东西,才能促进更好的进步。
本文记录JDK1.8之前的内存模型。 在Java中,内存主要分为以下几个块:
(1)堆
它是最大的一块内存区域,由所有线程共享,用于存储新的实例对象。
(2) 堆栈
它分为Java虚拟机栈和本地方法栈。
Java虚拟机栈(JVM Stack):
每个 JVM 线程都有一个私有堆栈,用于执行 Java 方法。
本地方法stack():
虚拟机堆栈所扮演的角色非常相似。 不同的是,虚拟机栈服务于虚拟机执行Java方法(即字节码),而本地方法栈服务于虚拟机使用的方法。
(3)方法区
用于存储虚拟机加载的类、静态变量和常量的信息。
(4) 程序计数器
程序计数器记录了当前线程执行程序的位置,改变计数器的值来决定下一条要执行的指令,比如循环、分支、方法跳转、异常处理、线程恢复等都依赖于程序柜台。
2. 常用JVM参数
-Xms初始堆大小
-Xmx最大堆大小
-Xmn年轻代大小
-XX:永久代初始值
-XX:最大永久代大小
-XX:年轻代与老年代的比例
-XX:Eden区域与区域大小的比例
-XX:+ 打印GC时间
-XX:+ 打印GC日志
-:../.log gc 日志位置
3、参数设置位置
以部署为例:
编辑bin目录下的.bat文件,添加
set CATALINA_OPTS=-XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:../tomcat_gc.log
启动服务并执行gc后,生成gc日志