JVM
北冥SP
这个作者很懒,什么都没留下…
展开
-
单例模式的饿汉模式,懒汉模式,双重校验模式详解
1.饿汉式ublic class singleton { //饿汉式 private static singleton instance=new singleton(); private singleton(){} public static singleton getInstance(){ return instance; }}2.懒汉式class SingletonLazy{ //懒汉式 private static S原创 2020-07-21 17:17:32 · 572 阅读 · 0 评论 -
关于对象头引发的思考,对象在内存中是如何存储的
今天在看并发编程这本书的时候,看到了对象头这一名词(如下图所示),这是我第一次接触这个概念,或是说第一次留意到这个概念,这不仅引起了我的深思,对象到底是以何种形式存储在内存中呢首先,我上网搜了一下对象在内存中的存储结构,经过筛选得到这样一张图,了解到对象的内存结构包括对象头(MarkWord,类指针,数组长度),实例数据,对齐(为了加快访问速度,java对象的大小必然是8的整数倍)三个部分。下面直接上代码,看看对象的每个部分到底是怎么样的new Object() 和 new byte[0]占多少字原创 2020-07-20 12:38:10 · 491 阅读 · 0 评论 -
栈帧中局部变量表,操作数栈,动态链接,方法出口的理解
栈帧的概念栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用至执行完成的过程,都对应着一个栈帧在虚拟机栈里从入栈到出栈的过程。一个线程中方法的调用链可能会很长,很多方法都同时处于执行状态。对于JVM执行引擎来说,在在活动线程中,只有位于JVM虚拟机栈栈顶的元素才是有效的,即称为当前栈帧,与这个栈帧相关连的方法称为当前方法,定义这个方法的类叫做当前类。执行引擎运行的所有字节码指令都只针对当前转载 2020-07-19 10:03:36 · 4968 阅读 · 0 评论 -
Java中的四种引用类型
Java中的四种引用类型:强引用、软引用、弱引用和虚引用有四种引用类型的原因在Java中是由JVM负责内存的分配和回收,这是它的优点(简化编程者的工作,不需要像C语言那样去手动操作内存),但同时也是它的缺点(不够灵活,垃圾回收对于编程者来说是不可控的)。在JDK1.2以前,如果一个对象不被任何变量引用,则程序无法再次使用这个对象,这个对象最终会被GC(GabageCollection:垃圾回收)。但是如果之后可能还会用到这个对象,就只能去新建一个了,这其实就降低了JVM性能,没有达到最大的优化策略。原创 2020-07-18 17:51:18 · 366 阅读 · 0 评论 -
有fullGC 为什么还会发生oom(OutOfMemoryError)
jvm有fullGc 为什么还会出现oom(OutOfMemoryError)问题:既然在触发full gc的时候,年老代和持久代都会被清理,那么为什么还会出现oom问题?而且对于强引用,当内存空间不足,java虚拟机宁愿抛出oom错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题;那么full gc机制的存在有何意义?还是说fgc主要针对的是驻扎在老年的的软引用? 既然如此,对于四种引用的方式如何抉择?总不能所有对象都创建引用队列使用软引用或弱引用吧?举个栗子类比下:为原创 2020-07-18 15:55:11 · 1307 阅读 · 0 评论 -
一文读懂JVM内存栈
JVM栈(数据结构就是栈结构,FILO:fisrt in last out,先进后出)当一个线程启动的时候,栈内存都会为这个线程开辟一块单独的区域来供这个线程使用。举例:假如现在有线程1、线程2两个线程进行了下图的操作:那么,此时栈内存会为线程1、线程2分配两块内存空间:分配好的空间中又是什么结构呢?我们继续引出“栈帧”这个概念,栈帧其实就是每个线程在运行具体方法的时候所拥有的独立的内存空间,进而保证各自局部变量的作用域范围。如图:局部变量表和操作数栈:结合代码说明一下局部变量表和操作数栈原创 2020-06-30 18:20:35 · 394 阅读 · 0 评论