zoukankan      html  css  js  c++  java
  • On-heap vs Off-heap 堆内内存与堆外内存

    JVM主要的内存区域有

    • heap
    • stack
    • 其它寄存器。

    heap主要是用来存储对象实例及数组值,可以认为java中所有通过new创建的对象都在此分配。

    On-heap是指在堆内内存,由GC进行创建回收,可以通过参数-Xms(最小)和-Xmx(最大)来控制

    Off-heap是指在堆外内存,不由GC创建,但可以通过full GC回收,通过-XX:MaxDirectMemorySize设置大小。

    通俗的讲,Off-heap存储就好比在Java堆外部的数据库中存储对象。
    优点是我们可以在该数据库中存储大量对象,而不受垃圾收集器管理。
    但是,当我们运行查询以从该数据库检索对象时,这些对象将复制到Java堆上。
    如果我们的应用程序经常检索某个对象,然后在处理请求时丢弃它们,则必须对每个请求检索的对象进行垃圾回收。
    而若我们使用On-heap存储,在处理每个请求后,所需的对象将保留在堆上,以备后续请求继续使用。

    缓存数据存放一般支持On-heap及Off-heap:
    堆内存放开销小、效率高、存储大小受限制,
    堆外存放开销大(还是比disk快,建议使用缓冲池)、存储容量较大,适合 存储不怎么变化 的数据。

    参考资料
    groups.google.com

  • 相关阅读:
    JSP自定义标签
    Java集合之Arrays 剖析
    关于Java8中的Comparator那些事
    关于Comparable和Comparator那些事
    浅析Thread的join() 方法
    多线程的具体实现
    如何实现 List 集合的线程安全
    集合使用 Iterator 删除元素
    Tomcat目录详解
    一文读懂微服务架构
  • 原文地址:https://www.cnblogs.com/lestatzhang/p/10611319.html
Copyright © 2011-2022 走看看