
JVM
levonmo
关注后端, Java
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java的基本类型一定存放在栈中吗?
基本数据类型存放在哪?基本类型的变量存在栈里或者堆里不是由"大小可知,生存期可知"就能确定了。关键是上下文。比如void func(){int a = 3;}这自然是存在栈里的。局部方法嘛。而class Test{int a = 3;}这就肯定是随对象放到堆里的。因此,不要孤立的看到基本类型就说放到栈里,看到引用类型就说放到堆里。区分引用变量和对象本原创 2017-11-11 09:04:35 · 5592 阅读 · 5 评论 -
java的内存结构
java的内存结构主要分为5个区域:下面主要是说一下每个区域主要是干嘛的:1.程序计数器 每个线程拥有一个PC寄存器 在线程创建的时候创建 指向下一条指令的地址 执行本地方法时,PC的值为undefined2.方法区 / 永久区 保持装载的类信息原创 2017-11-11 09:31:08 · 282 阅读 · 0 评论 -
堆的内存结构,对象内存如何分配,GC过程对象的转移
堆的内存结构第一次new出对象,普通对象放进eden区,对象很大就直接放进老年区(tenured)第一次GC,eden中没有被回收的对象 放进survivor①中(使用copying算发)第二次GC,将survivor①中存活的对象复制到survivor②中,这时候如果eden中有存活的对象 直接 放到survivor②中第三次GC,将survivor②中存活的对象原创 2017-11-11 11:28:41 · 528 阅读 · 0 评论 -
JVM的垃圾收集器
JVM中垃圾的回收由垃圾收集器进行,随着JDK的不断升级,垃圾收集器也开发出了各种版本,垃圾收集器不断优化的动力,就是为了实现更短的停顿。下面是7种不同的分代收集器,如果两个收集器之间有连线,则表示它们之间可以搭配使用;所处的区域表示属于新生代还是老年代收集器。1.Serial 收集器 (新生代)最基本、历史最悠久(JDK1.3.1之前),这是一个单线程的收集器,当转载 2017-11-11 18:56:48 · 162 阅读 · 0 评论 -
java对象的分配
要想在栈上分配,那么创建的对象就要很小,而且jvm要开始支持在栈上分配的(默认是开启的)1. 对象new出来首先放在栈上(前提条件要满足),栈上放不下放在线程本地,线程本地放不下就看对象是不是太大了,如果是很大就放在老年代,如果不是很大就放在eden---------------------------------------------------------------原创 2017-11-11 19:51:52 · 718 阅读 · 0 评论 -
JVM的垃圾回收器(图解)
更正:1: CMS不是完全不是STW的,分几个阶段 1.初始标记(STW) 找roots 2.并发标记 3.重新标记(STW) 4.并发清除原创 2017-11-11 21:19:43 · 250 阅读 · 0 评论 -
一些常用的JVM参数
-XX:+DoEscapeAnalysis 逃逸分析-XX:+EliminateAllocations 标量替换 --把这两个关闭(将前面的"+"替换为"-"),那么JVM就不会在栈上创建对象了-XX:+UseTLAB 使用线程本地缓存 --把上面三个关闭,new出来的对象就直接分配在eden区了-XX:+PrintGC 把GC过程打印出来。每发生一次GC都会打印出来原创 2017-11-11 19:14:35 · 601 阅读 · 0 评论 -
GC是如何确定垃圾的?和垃圾回收算法
1.什么是垃圾?对象占用了内存的资源,但是你却永远使用不了该对象了。一般情况是没有引用的对象,或者是没有执行外部引用的都对象(因为会有环形垃圾,它虽然有引用指引,但是无法被外部引用了)2.如何确定垃圾? 1.引用计数:有一个引用指向该对象就加一,什么时候值为0了,它就是垃圾。这种方法是不可行了,会有循环引用的问题 2.正向可达转载 2017-11-11 14:00:31 · 963 阅读 · 0 评论