Java基础——JVM内存结构
推荐阅读:https://www.cnblogs.com/wangjzh/p/5258254.html
一、内存结构图
先导知识:
一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每个java程序都需要运行在自己的JVM上,然后告知 JVM 程序的运行入口,再被 JVM 通过字节码解释器加载运行。
程序计数器
保存着当前线程执行的虚拟机字节码指令的内存地址,可以看作是当前线程所执行的字节码的行号指示器。使得保证线程切换回来后,还能恢复到原先状态。(本地native丰富则计数器为空)
虚拟机栈(JVM栈)
每创建一个线程时就会对应创建一个Java栈,所以Java栈也是"线程私有"的内存区域,这个栈中又会对应包含多个栈帧,每调用一个方法时就会往栈中创建并压入一个栈帧,栈帧是用来存储方法数据和部分过程结果(局部变量表、操作数栈、动态链接、方法出口等信息)的数据结构,每一个方法从调用到最终返回结果的过程,就对应一个栈帧从入栈到出栈的过程。
我们平时说的堆栈堆栈,栈就是指代的这个JVM栈,堆在下文讲解。
本地方法栈
与虚拟机栈类似,为本地方法服务。
方法区
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
方法区中还存在着常量池,常量池包含着一些常量和符号引用(加载类的连接阶段中的解析过程会将符号引用转换为直接引用)。
堆
堆(heap)是存储java实例或者对象的地方,是GC的主要区域,同样是线程共享的内存区域。(进一步可以细分为新生代和老年代)
垃圾回收机制,参考:https://www.cnblogs.com/andy-zcx/p/5522836.html
二、控制参数
-Xms:设置堆的最小空间大小。(初始化大小)
-Xmx:设置堆的最大空间大小。
-XX:NewSize:设置新生代最小空间大小。
-XX:MaxNewSize:设置新生代最大空间大小。
-XX:PermSize:设置永久代最小空间大小。
-XX:MaxPermSize:设置永久代最大空间大小。
-Xss:设置每个线程的堆栈大小。
完整参数信息:https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
参数的设置方式:http://blog.csdn.net/huanhuan_tiantian/article/details/8212885
java -Xms100m -Xmx384m Main中的 -Xms100m -Xmx384m即是指定你应用程序运行时,jvm的堆内存情况
Web项目中Tomcat的JVM参数配置:https://www.cnblogs.com/bluestorm/archive/2013/04/23/3037392.html
相关文章
- JVM学习(JVM内存模型 、JVM GC(垃圾回收)、 Java Class 、ClassLoader 、JVM JIT Compiler(即时编译器))
- java jvm用到的各种工具
- 从JAVA内存到垃圾回收,带你深入理解JVM
- Java架构师-调优(二):JVM性能调优【主要解决OOM(内存溢出)问题】【JDK内置工具:监控类(jps、jstat..)、故障排查(jinfo、jmap..)、可视化监控(VisualVM)】
- Java基础-JVM内存回收
- Java基础-JVM
- JAVA JVM 流程一
- 一文带你学会java的jvm精华知识点
- 深入浅出 Java 中 JVM 内存管理
- Java:一维数组创建与遍历问题!
- java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
- JVM常用命令和性能调优建议 [Could not create the Java virtual machine]
- Java工程师 必须掌握的知识点
- Java获取本机CPU的核数,获取Jvm信息
- 【JVM】如果你想学好 Java,怎么可以不懂 JVM 字节码指令集呢?看完这篇文章你将深入理解Java背后的原理
- java.lang.AssertionError: Status expected:<200> but was:<400>
- java-jvm-内存分区
- java-jvm-常量池
- JAVA技术交流群
- jvm系列(一):java类的加载机制
- Java 通过Index(索引)数组同时对多个数组进行排序
- Java 将List<Object> 转换成 Map<String, Map<String,List<Object>>>的几种方法
- jvm系列(六):Java服务GC参数调优案例
- 5种调优Java NIO和NIO.2的方式
- 【jvm我能讲两小时036】64位的jvm,new Object()新创建的对象在java中占用多少内存?