- 博客(11)
- 收藏
- 关注
原创 1.JVM四大重要组成部分与内存区域
ava源代码经过编译器生产 字节码文件,由JVM中的类加载器,将字节码文件加载到运行时数据区的方法区中,由于字节码文件并不能被操作系统直接运行,需要通过执行引擎,将字节码文件转化为对应操作系统的系统指令,并交给CPU执行,在该过程中,可能用到其他语言的本地库接口来实现整个程序。JDK8 之前,Hotspot 中方法区的实现是永久代(Perm),JDK8 开始使用元空间(Metaspace),以前永久代的静态变量和常量池移至堆内存,其他内容移至元空间,元空间直接在本地内存分配。他是怎么实现跨平台性的呢?
2022-09-24 22:23:49
703
1
原创 JAVA多线程基础
Java 给多线程编程提供了内置的支持。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。
2022-09-24 21:58:35
130
原创 ‘物品‘的标签:JAVA中的泛型
没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。:类似地,集合接口的实现都是用相同类型参数泛型化的,所以HashMap 实现 Map 等都是泛型的,Comparable和Comparator接口也是泛型的。泛型中,所有的类型转换都是自动和隐式的,不需要强制类型转换,可以提高代码的重用率,再加上明确的类型信息,代码的可读性也会更好。相应的应用场景怎么处理?
2022-09-24 21:48:45
92
原创 有关String、StringBuffer、StringBuilder三种字符串的类
通过上面的分析,我们需要在合适的场所选择合适的字符串拼接方式,但是并不一定就要选择append()和concat()方法,原因在于+根据符合我们的编程习惯,只有到了使用append()和concat()方法确实是可以对我们系统的效率起到比较大的帮助,才会考虑。这同样也创建了10W个字符串对象,这是它变慢的根本原因。与concat()方法相似,它也是进行字符数组处理的,加长,然后拷贝,但是请注意它最后是返回并没有返回一个新串,而是返回本身,也就说这这个10W次的循环过程中,它并没有产生新的字符串对象。
2022-09-24 21:46:21
165
原创 JAVA中的对象拷贝:clone方法 以及深拷贝和浅拷贝:
我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能的提升非常明显。Object类里的clone方法是浅拷贝。如果变量为String字符串,则拷贝其引用地址,但是在修改的时候,它会从字符串池中重新生成一个新的字符串,原有的字符串对象保持不变。深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,两个引用对象指向两个对象,但对象内容相同。
2022-09-24 21:38:55
684
原创 有关JAVA内部类的理解:
1、定义类的最终目的是创建一个类的实例,但是如果某个类的实例只是用一次,则可以将类的定义与类的创建放到一起完成,或者说在定义类的同时就创建一个类。(1)即在方法中或者作用域中定义的内部类,局部内部类与成员内部类基本一致,只是他们的作用域不同,局部内部类只能在该方法中被使用,出了该方法就会失效。要想使用局部内部类时,需要生成对象,对象调用方法,在方法中才能调用局部内部类。(2)对于内部类(局部内部类、匿名内部类除外),可以使用所有的访问修饰符,因为内部类放在外部类中,与成员变量的地位一致,所以有四种可能。
2022-09-24 21:36:16
114
原创 抽象类与接口的定义与区别:
(1)抽象类主要用来抽取子类的通用特性,作为子类的模板,不能实例化,只能作为子类的超类。(2)接口用于定义一系列抽象方法的集合,一个类实现了一个接口,就必须要实现该接口的所有抽象方法,
2022-09-24 21:33:34
439
原创 关于static关键字的理解
当JVM加载一个类的时候,如果该类存在static修饰的成员变量和成员方法,就会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域;同时被static修饰的成员变量和成员方法是被该类的所有实例共享的,不依赖于某个特定的实例变量,任何一个实例对其的修改都会导致其他实例的变化。全局变量在程序启动运行时就开始分配内存,程序结束时释放内存,与局部变量的动态分配、动态释放相比,他的生命周期比较长,因此过多的全局变量会占用较多的内存。(2)执行子类的静态代码块,并初始化子类静态成员变量;
2022-09-24 21:29:40
364
原创 final关键字的使用
final表示的是“无法被改变的”,不想被改变的理由有两种,一种是效率,一种是设计。final修饰属性,声明成员变量时可以不赋值,而且一旦赋值就不能被修改了。运行时常量:运行期初始后,我们不希望他改变;final修饰参数在内部类中是非常有用的,编译时常量:永远不可改变;
2022-09-24 21:02:21
133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人