java内存机制与启动参数优化 Java 内存机制是指 Java 虚拟机(JVM)管理内存的机制。JVM 主要管理两种类型的内存:堆(Heap)和非堆(Perm)。堆是 Java 代码使用的内存,留给开发人员使用的;非堆是 JVM 留给自己的,成为永久代。永久代中保存类信息、方法区、JVM 内部处理或优化所需的内存、每个类结构、方法和构造方法的代码等。 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:新生代(Young)和老年代(Old)。新生代又被划分成三个区域:Eden、FromSurvivor(S0)、ToSurvivor(S1)。大多数情况下,Java 中新建的对象都是在新生代上分配的,新生代由 Eden 和两块相同大小的 S0 和 S1 组成。我们可以通过-Xmn 设置新生代的大小,-XX:SurvivorRatio 设置 Eden 和 S 区的比值。 垃圾回收算法是 Java 中清理内存的机制。最基础的搜集算法是“标记-清除算法”(Mark-Sweep),它分成“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,然后回收所有需要回收的对象。为了解决效率问题,一种称为“复制”(Copying)的搜集算法出现,它将可用内存划分为两块,每次只使用其中的一块,当半区内存用完了,仅将还存活的对象复制到另外一块上面,然后就把原来整块内存空间一次过清理掉。 在商业虚拟机中都是用了这一种收集算法来回收新生代,IBM 有专门研究表明新生代中的对象 98% 是朝生夕死的,所以并不需要按照 1:1 的比例来划分内存空间,而是将内存分为一块较大的 Eden 空间和 2 块较少的 Survivor 空间,每次使用 Eden 和其中一块 Survivor,当回收时将 Eden 和 Survivor 还存活的对象一次过拷贝到另外一块 Survivor 空间上,然后清理掉 Eden 和用过的 Survivor。 Sun Hotspot 虚拟机默认 Eden 和 Survivor 的大小比例是 8:1,也就是每次只有 10% 的内存是“浪费”的。当然,98% 的对象可回收只是一般场景下的数据,我们没有办法保证每次回收都只有 10% 以内的对象存活,当 Survivor 空间不够用时,需要依赖其他内存(譬如老年代)进行分配担保(Handle Promotion)。 复制收集算法在对象存活率高的时候,效率有所下降。更关键的是,如果不想浪费 50% 的空间,就需要有额外的空间进行分配担保用于应付半区内存中所有对象都 100% 存活的极端情况,所以在老年代一般不能直接选用这种算法。 Java 启动参数优化是指在启动 Java 应用程序时,可以设置的一些参数,以优化 Java 虚拟机的性能。例如,我们可以通过-Xmn 设置新生代的大小,-XX:SurvivorRatio 设置 Eden 和 S 区的比值,以优化垃圾回收的效率。同时,我们也可以设置-XX:PretenureSizeThreshold=1024(单位是字节),意思是对象超过此大小,就直接分配到老年代生面。 在实际应用中,需要根据具体情况选择合适的垃圾回收算法和启动参数,以优化 Java 应用程序的性能和内存使用情况。






















剩余6页未读,继续阅读


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (2025)护理技能竞赛理论题库及答案.docx
- (2025)护理人员法律法规试题(附含答案).docx
- (2025)护理知识竞赛考试题库及答案.docx
- (2025)护理知识竞赛考试题库与答案.docx
- (2025)领导能力测试题与答案.docx
- (2025)流行性感冒诊疗方案(2025年版)培训试题及答案.docx
- (2025)麻醉中级基础知识考试真题及答案.docx
- (2025)麻醉中级基础知识考试真题与答案.docx
- 网络管理员年终个人工作总结范文1.doc
- (2025)拟发展对象考试题及答案.docx
- (2025)拟发展对象考试题与答案.docx
- (2025)农村商业银行笔试备考题库及答案.docx
- (2025)农村商业银行笔试备考题库与答案.docx
- (2025)农村信用社业务员笔试试题(附答案).docx
- (2025)农村信用社业务员笔试试题(附含答案).docx
- 物联网传感器应用智能家居解决方案.doc


