
jvm
一只大马猴
既然选择了做这行,就要耐得住寂寞
展开
-
Java虚拟机OOM之Metaspace
Java8及以后的版本使用Metaspace来替代永久代。Metaspace是方法区在HotSpot中的实现,它与持久代最大的区别在于:Metaspace并不在虚拟机内存中而是使用本地内存。也即在java8中,class metadata,被存储在叫作Metaspace的native memory中。永久代(java8后被原空间Metaspace取代了)存放了以下信息:虚拟机加载的...原创 2019-12-22 21:54:12 · 1639 阅读 · 0 评论 -
Java虚拟机OOM之unable to create new native thread
高并发请求服务器时,经常出现如下异常:java.lang.OutOfMemoryError:unable to create new native thread.准确的讲,该native thread错误与对应的平台有关。导致原因:你的应用创建了太多的线程,一个应用进程创建多个线程,超过系统承载极限 你的服务器并不允许你的应用程序创建这么多线程,linux系统默认允许单个进程可以创建...原创 2019-12-22 21:33:03 · 1866 阅读 · 1 评论 -
Java虚拟机OOM之GC Direct buffer memory
故障现象:java.lang.OutOfMemoryError:Direct buffer memory导致原因:写NIO程序经常使用ByteBuffer来读取或者写入数据,这是一种基于通道(Channel)与缓冲区(Buffer)的I/O方式。它可以使用native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行...原创 2019-12-22 20:52:11 · 576 阅读 · 0 评论 -
Java虚拟机OOM之GC overhead limit exceeded
GC回收时间过长时会抛出OutOfMemoryError。过长的定义是:超过98%的时间用来做GC并且回收了不到2%的堆内存。连续多次GC都只回收了不到2%的极端情况下才会抛出。假如不抛出GC overhead limit错误会发生什么情况呢?那就是GC清理的这么点内存很快会再次填满,迫使GC再次执行,这样就会形成恶性循环,CPU使用率一直是100%,而GC却没有任何成果示例代码:...原创 2019-12-22 19:16:21 · 539 阅读 · 0 评论 -
Java虚拟机OOM之Java heap space
堆内存不足以分配对象时发生该错误。示例代码:public class JavaHeapSpaceDemo { public static void main(String[] args) { byte[] heap = new byte[50 * 1024 * 1024]; }}因为本机内存较大,手动设置堆内存大小为1M-Xms1M -X...原创 2019-12-22 18:01:22 · 489 阅读 · 0 评论 -
Java虚拟机OOM之StackOverflowError
示例代码:public class StackOverFlowErrorDemo { public static void main(String[] args) { stackOverflowError(); } private static void stackOverflowError() { stackOverflowErr...原创 2019-12-22 17:47:07 · 238 阅读 · 0 评论 -
Java虚拟机5:jvm常见参数介绍
我们用IDEA开发的时候,配置不高的情况下经常会卡顿,这时候估计大家常有的做法,就是百度,参照网上,修改IDEA一系列的配置参数。那JVM中都有哪些常见参数呢?下面就来数一数,二四六七八。常用参数堆中各区大小分配:-Xms:初始堆大小-Xmx:最大堆大小-XX:NewSize=n:设置年轻代大小-XX:NewRatio=n:设置年轻代和年老代的比值。如:n=3,表示年轻代与...原创 2019-03-10 21:56:46 · 435 阅读 · 0 评论 -
Java虚拟机4:jvm优化(JDK自带的工具介绍)
上图是JDK安装目录下的文件列表,这个列表中,一般的同学,应该只用过java和javac这两个命令。今天我们要说的jvm优化,不是第三方的工具,就是JDK这么目录里自带的命令工具。1.jps打印HotSpot VM进程(不要和linux的ps混淆,ps是linux系统的所有在运行进程)。可以查看VMID,JVM参数,main()函数参数,主类名/Jar路径。2.jsta...原创 2019-03-09 23:20:56 · 706 阅读 · 0 评论 -
Java虚拟机3:垃圾回收算法
java虚拟机的垃圾回收算法有多种,针对不对的虚拟机,回收算法也不一样。现在讨论一下基于HotSpot的虚拟机的几种常见垃圾回收算法:1.引用计数算法(Reference Counting)比较老的回收算法,原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只收集计数为0的对象。此算法最致命的是无法处理循环引用。举个例子:有对象A.B,都有一个ref属...原创 2019-03-04 21:36:03 · 339 阅读 · 0 评论 -
Java虚拟机2:jvm堆分代
写在前面的话:本文讨论的虚拟机内存分代,均指HotSpot虚拟机。jvm的内存分代策略:java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般而言就是:新生代,老年代,永久代。那为什么要分代?堆内存是虚拟机管理的内存中最大的一块,也是垃圾回收最频繁的一块区域,程序所有的实例对象都是存放在堆内存中的。给堆内存分代,是为了提高对象内存分配和垃圾回收的效率。假如堆内存...原创 2019-03-03 23:00:16 · 342 阅读 · 0 评论 -
Java虚拟机3:jvm垃圾收集器
jvm中的垃圾收集器分为两种:ScavengeGC(次收集) Full GC(全收集)ScavengeGC(次收集)和Full GC(全收集)的区别是什么?新生代GC(ScavengeGC):指发生在新生代的GC,因为新生代的java对象大多都是生命周期较短,所以次收集非常频繁,一般回收速度也比较快,当Eden空间不足以为对象分配内存时,就会触发Scavenge GC。...原创 2019-03-07 22:21:52 · 233 阅读 · 0 评论 -
Java虚拟机1:Java虚拟机的内存划分和内存溢出
内存区域Java 虚拟机在执行 Java 程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java 虚拟机规范将 JVM 所管理的内存分为以下几个运行时数据区:程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区。下面详细阐述各数据区所存储的数据类型。 程序计数器一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变该计数器...转载 2018-10-12 13:53:57 · 148 阅读 · 0 评论