现在越来越觉得java基础细节的重要性了,这样才有交流的价值。 1、静态变量与非静态变量的区别? ①分配的空间: 静态变量存在于虚拟机的方法区中,并且只有一份这样的内存空间。 非静态变量需要通过new出类实例才能够存在,且分配于堆内存空间中,每new出一份类实例便存在一份变量。 ②使用的方法上: 静 ...
分类:
编程语言 时间:
2018-08-16 22:34:24
阅读次数:
194
1. JVM相关参数设置JVM相关配置-XX:+PrintGC两次次YoungGC,两次FullGC。-XX:+PrintGCDetails打印GC时的内存,并且在程序结束时打印堆内存使用情况-XX:+PrintHeapAtGC每次GC时会分别打印回收前与回收后堆信息-XX:+PrintGCTime... ...
分类:
编程语言 时间:
2018-08-16 14:57:26
阅读次数:
150
非堆内存相关配置-XX:PermSize永久区初始大小-XX:MaxPermSize永久区最大大小 在JDK1.8中使用-XX:MxMetaspaceSize配置永久区最大大小-Xss线程栈大小-XX:MaxDirectMemorySize直接内存大小,默认为最大堆空间,即-Xmx。当直接内存使用量... ...
分类:
编程语言 时间:
2018-08-16 14:56:53
阅读次数:
188
以上代码的运行结果是什么? 答案是 true、true、false、true、false!!! 从写hello world 开始,大家都知道: ==比较的是栈内存中存放的对象的堆内存地址,用来判断两个对象的地址是否相同,即是否是指向同一个对象。 equals比较的是两个对象的内容是否相同。 按照上述 ...
分类:
其他好文 时间:
2018-08-13 12:25:09
阅读次数:
144
智能指针的用处:在c++中,使用普通指针容易造成堆内存的泄露问题,即程序员会忘记释放,以及二次释放,程序发生异常时内存泄漏等问题,而使用智能指针可以更好的管理堆内存。注意,在这里智能指针是一个类而非真正的指针,只是对一个真正的指针进行包装,代理原指针。通过操作符的重载,可以让智能指针和真正的指针有类 ...
分类:
编程语言 时间:
2018-08-12 23:42:22
阅读次数:
354
==: == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。 1、比较的是操作符两端的操作数是否是同一个对象。2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。3、比较的是地址,如果是具体的阿 ...
分类:
其他好文 时间:
2018-08-12 21:35:47
阅读次数:
100
简述java垃圾回收机制 在java中我们不需要去释放一个对象的内存,这个由jvm去做。jvm中有个垃圾回收线程,它是低优先级的,当虚拟机空闲时或者堆内存不足时,它才会执行回收没用的对象。 内存区域中的程序计数器,虚拟机栈,本地栈是随线程而生随线程而死,每个栈帧的大小在类被加载时就已经确定下来了,无 ...
分类:
其他好文 时间:
2018-08-12 20:10:12
阅读次数:
161
前言: 在平时的开发中,我们每天要new无法的对象,这些对象存在于jvm的堆内存中,而他们的生老病死生命周期全部归JVM控制。不同的对象引用的,其生命周期也有显著的不同,如何通过其他不用强度的引用来避免jvm的最大隐患:out of Memory?本篇博客将会介绍java的四种不同的引用类型,来看一 ...
分类:
编程语言 时间:
2018-08-12 10:25:50
阅读次数:
152
1、链表和数组的区别 (1)逻辑结构:数组大小是在声明数组时就要知道;链表大小动态申请,不必事先知道。 (2)存储位置:数组(栈上一段连续的内存);链表(动态申请的堆内存,可以是不连续的内存) (3)特点不同:数组的特点是随机访问效率高,但是删除和添加元素效率低,要移动多个元素;链表则是增加和删除结 ...
分类:
其他好文 时间:
2018-08-11 23:47:18
阅读次数:
201
简单介绍 Java中的字符串常量池(String Pool)是存储在Java堆内存中的字符串池。我们知道String是java中比较特殊的类,我们可以使用new运算符创建String对象,也可以用双引号(”“)创建字串对象。 Java中的字符串常量池 下图,清楚地解释了如何在Java堆内存中维护字符 ...
分类:
编程语言 时间:
2018-08-11 01:28:17
阅读次数:
4253