首页 技术 正文
技术 2022年11月6日
0 收藏 836 点赞 374 浏览 1417 个字

JVM 运行时数据区总结 栈 堆 堆大小配置总结

1. 程序计数器

  线程私有

  当前线程所执行的字节码的行号指示器

2. 虚拟机栈

  线程私有

  存:Java方法(局部变量表(基本数据类型)、操作数栈、动态链栈、方法出口)

  StackOverflowError 栈深度大于虚拟机所允许的深度

  OutOfMemoryError 无法满足内存分配

3. 本地方法栈

  线程私有

  与虚拟机栈相似

  StackOverflowError 栈深度大于虚拟机所允许的深度

  OutOfMemoryError 无法满足内存分配

4. 堆

  线程共享

  存:对象实例,新生代 老年代

  堆大小设置

  -Xmx 设置JVM最大可用内存

  -Xms 设置JVM初始堆大小

  Xmn 设置新生代大小。持久代一般固定大小为64m,所以增大新生代后,将会减小老年代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

  -Xss  设置每个线程的堆栈大小

  整个JVM内存大小=新生代大小 +老年代大小 + 持久代大小。

  -XX:NewSize=n: 设置新生代大小

  -XX:NewRatio=n: 设置新生代和老年代的比值。如:为3,表示新生代与老年代比值为1:3,新生代占整个新生代老年代和的1/4

  -XX:SurvivorRatio=n: 新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

  新生代:Eden空间、From Survivor空间、To Survivor空间

  -XX:MaxTenuringThreshold=n:设置垃圾最大年龄。如果设置为0的话,则新生代对象不经过Survivor区,直接进入老年代。对于老年代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则新生代对象会在Survivor区进行多次复制,这样可以增加对象在新生代的存活时间,增加在新生代即被回收的概论。

  -XX:MaxPermSize=n: 设置持久代大小

  OutOfMemoryError 无法满足内存分配

  参考:JVM调优总结 -Xms -Xmx -Xmn -Xss

5. 方法区

  线程共享 Non-Heap 非堆 熟称“持久代”

  存:已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

  -XX:MaxPermSize=n:  设置持久代大小

  OutOfMemoryError 无法满足内存分配

5.1 运行时常量池

  Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

  String.intern()方法

  OutOfMemoryError 无法满足内存分配

6. 直接内存

  JDK1.4新加入了NIO(NIO参考 Java NIO 学习总结 学习手册),引入了一中基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。

  本机直接内存的分配不会受到Java堆大小的限制,会受到本机总内存(包括RAM以及SWAP区或者分页文件)大小以及处理器寻址空间的限制。

  OutOfMemoryError 无法满足内存分配

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,023
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,513
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,361
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,143
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,774
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,853