
jvm
为你小站
这个作者很懒,什么都没留下…
展开
-
jvm内存理解
方法区:存储类的信息、常量、静态(线程共享的) 堆内存:使用new的对象、定义的数组(线程共享的) java栈:基本数据类型、局部变量(线程私有的) 本地方法栈:是java语言调用外部语言(比如调用c语言方法)调用外部语言的方法都是使用native进行修饰的 执行引擎:执行字节码指令 pc寄存器:是一个以线程私有的一块较小的内存空间,用于记录所属线程所执行的字节码的行号指示器(相当于...原创 2019-03-29 23:25:17 · 200 阅读 · 0 评论 -
垃圾回收机制以及System.gc()、finalize()方法
1、什么是垃圾回收机制? jvm不定时的自动回收不可达对象。 2、什么是不可达对象? 对象没有被引用或者没有存活。 3、System.gc()是什么? 这个方法是提醒虚拟机,程序员希望你在这回收一下对象,而并不是一定会回收,要虚拟机有时间才会回收。 4、finalize()方法是干嘛的? 在垃圾回收机制执行之前,会执行finalize()里面的代码。这个方法是重写Object类的 ...原创 2019-03-31 22:55:09 · 475 阅读 · 0 评论 -
java新生代和老年代
堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。 堆的内存模型大致为: 新生代 ( Young ) 与老年代 ( Old ) 的比例的值为1:2( 该值可以通...转载 2019-03-31 23:14:04 · 1873 阅读 · 0 评论 -
java.lang.OutOfMemoryError: Java heap space JVM内存溢出(堆溢出)
我先演示一下jvm内存溢出错误。 package com.sk.jvm; import java.util.ArrayList; import java.util.List; public class Test003 { /** * 运行这段代码必须堆内存10m以上 * 因为for循环循环了10次,每次生成了1m堆内存大小 * * @param args */ p...原创 2019-04-06 10:43:22 · 1396 阅读 · 0 评论 -
JVM参数配置
jvm参数调优主要是围绕堆内存, jvm参数 常用配置 -XX:+PrintGC 每次触发GC的时候打印相关日志 -XX:+UseSerialGC串行回收 -XX:+PrintGCDetails 更详细的GC日志 -Xms 堆初始值 -Xmx ...原创 2019-04-06 10:49:35 · 149 阅读 · 0 评论 -
java.lang.StackOverflowError JVM栈溢出
栈溢出产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用,也会发生栈溢出。 我们先演示一下递归调用 产生栈溢出错误: package com.sk.jvm; public class Test004 { private static int count; public static void count(){ try { count++; co...原创 2019-04-06 11:20:36 · 1456 阅读 · 0 评论 -
内存泄漏和内存溢出的区别
内存溢出:是在申请内存空间时,超过堆的最大空间。 (比如你要创建10w个对象,需要10m内存,而你的堆内存只有9m那么就会溢出,如果还不理解内存溢出可以在我的博客里看看JVM内存溢出 (堆溢出)) 内存泄漏:指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 ...原创 2019-04-06 11:28:25 · 494 阅读 · 0 评论 -
JVM之内存区域介绍
JVM所管理的内存分为以下几个运行时数据区域: 程序计数器:它是一块很小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,在字节码解释器工作时就是通过改变这个计数器的值来判断下一条执行哪一条字节码指令, 由于java虚拟机的多线程是通过线程轮流切换并分配处理处理器执行时间额方式来实现,所以在一个时刻,只会执行一条线程中的指令.为了线程切换后能恢复到正确的执行位置,每条线程都会有一个独立...原创 2019-08-14 21:11:15 · 146 阅读 · 0 评论