java基础
→思
这个作者很懒,什么都没留下…
展开
-
Java中final修饰的字符串和常量池之间的联系
一、final修饰符1、被final修饰的常量,在编译阶段会存入调用类的常量池中。2、被final修饰的方法,JVM会尝试为之寻求内联,这对于提升Java的效率是非常重要的。因此,假如能确定方法不会被继承,那么尽量将方法定义为final的。3、final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。二、用final来修饰字符串先看一段代码String a = "123...原创 2019-03-29 15:43:34 · 2257 阅读 · 0 评论 -
GC回收对象算法(GC Root和引用链)
可达性分析算法在主流的商用程序语言(Java、C#,甚至包括前面提到的古老的Lisp)的主流实现中,都是称通过可达性分析(Reachability Analysis)来判定对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相...转载 2019-03-31 11:40:55 · 2109 阅读 · 0 评论 -
final修饰的变量就是常量?final修饰局部变量在栈还是堆还是常量池中?
概念什么是常量?对于这个问题,可能很多人都可以脱口而出 : 用final修饰的变量是常量 ,或者是在编译时期定义好的字符串。(字符串常量)但是这种说法是不严谨的,因为准确来说 : 常量是用final修饰的成员变量!常量在类编译时期载入类的常量池中。即final修饰的成员变量(实例变量)和静态变量(静态变量也只能是用static修饰的成员变量),那么用final修饰的局部变量(方法内)我们也...转载 2019-03-28 09:58:56 · 2100 阅读 · 0 评论 -
Safepoint
为什么需要safepoint很明显safepoint是个让人不开心的东西, 线程都干不了活了, 怎么搞生产? 存在是因为需要, 我们知道java在语言级别提供了线程支持, 每个线程都是独立的执行单元. 堆里对象的引用关系抽象出来就是一副有向图(Directed graph), 图中的节点就是对象, 该对象被其他对象引用可以用该对象的入度(indegree)表示, 而对象的出度(outdegree...转载 2019-04-01 19:38:49 · 203 阅读 · 0 评论 -
java中对象的访问定位
java中对象的访问定位建立对象是为了使用对象,我们java程序员需要通过虚拟机栈中的reference来访问对象,但是虚拟机的规范中只规定了一个指向对象的指针,并没有规定以哪种方式去定位、访问对象在堆中的具体位置。所以对象访问方式也是取决于虚拟机实现而定的。目前主流的访问方式有使用句柄和直接指针两种。如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,reference中...原创 2019-03-28 19:23:43 · 172 阅读 · 0 评论 -
对于骨架类(AbstractInterface)的理解
在effective Java上看到,这样做的好处:痛过对你导出的每个重要接口都提供一个抽象的骨架实现类(skeletal implementation)类,把接口和抽象类的优点结合起来。接口的作用仍然是定义类型,但是骨架实现类接管了所有与接口实现相关的工作。通过对Java源码的学习我们会发现,AbstractCollection实现了Collection接口,List接口继承自Collecti...转载 2019-04-16 21:12:21 · 293 阅读 · 0 评论 -
Akka 框架的主要角色和常用方法
一、Akka基础参考:https://doc.yonyoucloud.com/doc/akka-doc-cn/2.3.6/scala/book/chapter3/05_mailboxes.html二、主要类和方法的介绍Props类Props是用于创建对象的配置对象,它是不可变的对象,所以它是线程安全的,完全可共享的。RoundRobinPool类使用循环选择法的路由池,建议使用...原创 2019-05-30 18:15:08 · 299 阅读 · 0 评论 -
Full GC (Ergonomics) 产生的原因
发生Full GC,有很多种原因,不仅仅是只有Allocation Failure。还有以下这么多:#include "precompiled.hpp"#include "gc/shared/gcCause.hpp"const char* GCCause::to_string(GCCause::Cause cause) { switch (cause) { c...转载 2019-06-12 14:49:24 · 21523 阅读 · 1 评论 -
JVM新生代为什么要有Survivor区
1 为什么要有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里?堆内存分类如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做触发了Full GC)。老年代的内存空间远大于新生代,进行一次Ful...转载 2019-06-12 12:47:02 · 500 阅读 · 0 评论