DisableExplicitGC和Direct ByteBuffer

DisableExplicitGC和Direct ByteBuffer的相关文章

Direct ByteBuffer学习

ByteBuffer有两种一种是heap ByteBuffer,该类对象分配在JVM的堆内存里面,直接由Java虚拟机负责垃圾回收,一种是direct ByteBuffer是通过jni在虚拟机外内存中分配的.通过jmap无法查看该快内存的使用情况.只能通过top来看它的内存使用情况. JVM堆内存大小可以通过-Xmx来设置,同样的direct ByteBuffer可以通过-XX:MaxDirectMemorySize来设置,此参数的含义是当Direct ByteBuffer分配的堆外内存到达指定

收藏:Non-direct与direct ByteBuffer区别

相信大家都知道,但是两者的区别在什么地方呢?在不同的环境下采用哪种类型的ByteBuffer会更有效率呢?先解释一下两者的区别:Non-directByteBuffer内存是分配在堆上的,直接由Java虚拟机负责垃圾收集,你可以把它想象成一个字节数组的包装类,如下伪码所示:HeapByteBuffer extends ByteBuffer {    byte[] content;    int position, limit, capacity;    ......}而DirectByteBuf

JAVA堆外内存

JVM可以使用的内存分外2种:堆内存和堆外内存. 堆内存完全由JVM负责分配和释放,如果程序没有缺陷代码导致内存泄露,那么就不会遇到java.lang.OutOfMemoryError这个错误. 使用堆外内存,就是为了能直接分配和释放内存,提高效率.JDK5.0之后,代码中能直接操作本地内存的方式有2种:使用未公开的Unsafe和NIO包下ByteBuffer. 关于Unsafe对象的简介和获取方式,可以参考:http://blog.csdn.net/aitangyong/article/det

java基础之 GC

Java程序员在编码过程中通常不需要考虑内存问题,JVM经过高度优化的GC机制大部分情况下都能够很好地处理堆(Heap)的清理问题.以至于许多Java程序员认为,我只需要关心何时创建对象,而回收对象,就交给GC来做吧!甚至有人说,如果在编程过程中频繁考虑内存问题,是一种退化,这些事情应该交给编译器,交给虚拟机来解决. 这话其实也没有太大问题,的确,大部分场景下关心内存.GC的问题,显得有点“杞人忧天”了,高老爷说过: 过早优化是万恶之源. 但另一方面,什么才是“过早优化”? If we coul

【转】面向GC的Java编程

Java程序员在编码过程中通常不需要考虑内存问题,JVM经过高度优化的GC机制大部分情况下都能够很好地处理堆(Heap)的清理问题.以至于许多Java程序员认为,我只需要关心何时创建对象,而回收对象,就交给GC来做吧!甚至有人说,如果在编程过程中频繁考虑内存问题,是一种退化,这些事情应该交给编译器,交给虚拟机来解决. 这话其实也没有太大问题,的确,大部分场景下关心内存.GC的问题,显得有点“杞人忧天”了,高老爷说过:过早优化是万恶之源. 但另一方面,什么才是“过早优化”? If we could

java.lang.OutOfMemoryError:Map failed总结

常见的OOM是以下这几种:1.GC overhead limit exceeded2.Java Heap Space3.Unable to create new native thread4.PermGen Space5.Direct buffer memory6.request {} bytes for {}. Out of swap space?一直自认为不会有超过这个范围的OOM类型出现,没想到最近看到了一个新的OOM的类型,而这次OOM引发了一次严重的故障,整个排查过程是内部一个同事排查

深入了解JVW

Java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”.可以看出JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是Java代码可及的内存,是留给开发人员使用的:非堆就是JVM留给 自己用的,所以方法区.JVM内部处理或优化所需的内存(如JIT编译后的代码缓存).每个类

Java启动参数的思考

前几年在将OS从32 bit升级到64 bit,以及虚拟机的内存调整到8G后,我把应用的Java启动参数重新写了一版,作为目前大部分Java应用的默认启动参数模版,这几年下来,发现在这个标准版的启动参数上还是犯了一些错误的. 1. -XX:+DisableExplicitGCJava在实现RMI Server的时候会通过定时的调System.gc来强制做GC(即使程序里没用到RMI也会被启动),这个动作非常烦人,另外也是为了避免应用代码上显式去调用System.gc导致一些没必要的GC动作产生,

面向GC的Java编程

转自http://hellojava.info/?p=341 HelloJava微信公众账号网站 面向GC的Java编程 Leave a reply 这是内部一个同事(沐剑)写的文章,国外有一家专门做Java性能优化的公司,并且它主要关注Java内存使用的优化,重点是数据结构的选择,优化效果非常明显,所以其实一个优秀的Java程序员和一个普通的Java程序员产出的东西差距是相当大的. Java程序员在编码过程中通常不需要考虑内存问题,JVM经过高度优化的GC机制大部分情况下都能够很好地处理堆(H