JAVA笔记
庐州小白
这个作者很懒,什么都没留下…
展开
-
垃圾收集算法
java虚拟机在运行时,内存主要分为7个部分。包括程序计数器:记录正在执行的虚拟机指令码地址。java虚拟机栈:每个java方法执行创建的局部变量表、操作数栈、常量池引用等信息。本地方法栈:与java虚拟机栈相同,但是是为本地方法服务的。堆:所有的对象都要到堆中分配内存,是垃圾收集的主要区域。堆不需要连续内存,可以动态增加。方法区:用于存放已加载的类信息、常量、静态变量,即时编译后的代码...原创 2020-02-24 11:30:02 · 100 阅读 · 0 评论 -
Cookie和Session的区别,怎么防止Cookie欺骗
(1)Cookie只能保存ASCII码字符串,但是Session却可以保存各种类型的数据。(2)Cookie存储在本地,对阅读器可见。因此涉及到敏感信息的数据需要加密,在服务器端再解密。Session保存在服务器端,对客户端透明,不存在敏感信息泄露风险。(3)Cookie可以设置有效期,但是Session依赖名为SESSIONID的Cookie,过期时间默许为-1,只要关闭阅读器,该Sessi...原创 2020-02-20 20:03:08 · 737 阅读 · 0 评论 -
什么情况会发生死锁,死锁的处理方法
如两个进程分别等待对方占有的资源,于是两个进程都不能执行而处于等待状态,此线程称为死锁。进程的三态模型就绪态 ↔\leftrightarrow↔ 运行态 →\to→ 等待态 →\to→ 就绪态进程的五态模型创建进程 →\to→ 就绪态 ↔\leftrightarrow↔ 执行态 →\to→ 等待态 →\to→ 就绪态 (执行态 →\to→ 结束进程)进程的七态模型添加 挂起就绪态 和...原创 2020-02-20 17:14:04 · 1100 阅读 · 0 评论 -
线程局部变量,线程池参数
线程局部变量线程局部变量高效的为每个使用它的线程提供单独的线程局部变量副本,每个线程只能看到与自己联系的值,而不知道其他线程可能正在使用或者修改的值。Java编译器并不为线程局部变量提供特别的语言支持,而是使用一个ThreadLocal类来实现这些支持。因为线程局部变量是用类来实现的而不是java语言的一部分,所以想要使用线程局部变量需要先实例化ThreadLoacl的一个对象,ThreadL...原创 2020-02-20 15:35:30 · 472 阅读 · 0 评论 -
sleep和wait的区别,sleep会不会释放锁,notify和notifyAll的区别
sleep和waitwait是Object的方法,wait是Thread的静态方法。wait会释放锁,sleep不会。notify和notifyAll通过wait使得线程挂起等待某个条件满足,当其他线程得运行使得这个条件满足时,就可以调用notify或者notifyAll来唤醒这个进程。他们都属于Object的方法。只能在同步块或者同步方法中调用,否则会抛出illegalMonitorEx...原创 2020-02-20 11:06:49 · 1912 阅读 · 1 评论 -
volatile怎么保证可见性,synchronized和lock的区别,synchronized的底层实现
可见性是指:当多个线程访问同一个变量时,某个线程修改了该变量的值,其他线程可以立即看到修改后的变量。当一个共享变量被volatile修饰后,一旦该变量的值被修改,修改后的变量会被理机更新到主存中,当有其他线程需要该变量的值会到主存中读取。(存在层次)synchronized是JVM实现的,他是java的关键字。lock是java中的接口。(锁的释放)当出现异常的时候,synchronized会...原创 2020-02-20 10:35:17 · 511 阅读 · 0 评论 -
==和equals的区别,如果重写了equals()不重写hashCode()会发生什么?
==是操作符,会返回一个boolean类型的值,用于计算两个操作数的值的关系。equals是Object的实例方法,用于比较两个对象的内容是否相同。hashcode()是Object的native方法,他会获取一个对象的hash值,返回一个整型值,用于表示该对象在哈希表中索引位置。“==”:为关系操作符对于8个基本类型:整型:byte,short,int,long 浮点数:float,...原创 2020-02-19 10:47:48 · 1127 阅读 · 0 评论 -
String不可变的好处?(String为什么要被声明为不可变?)
String对象的hash值经常被使用。例如作为HashMap的key,因为String类型是不可变的,所以其hash值也是不变的。因此只需要计算一次。String对象只要被创建过,就可以从String pool中取到该对象的引用。只有String是不可变的,才能从String pool中取得引用。String作为参数,String的不可变可以保证参数的不变性,保证参数安全。例如在网络连接中...原创 2020-02-18 20:17:01 · 774 阅读 · 0 评论 -
String、StringBuffer、StringBuilder的区别,怎么理解String不变性?
String是字符串常量,StringBuilder和StringBuffer是字符串变量。String是一个java类型,被声明为final,所以是不可继承的。并且,java8中String内部用char数组存储数据,java9之后用byte数组存储数据。该数组被声明为final,意味着该数组初始化之后,不能用该数组名引用其他数组。String类内部并不存在对该数组的操作方法,因此保证了Str...原创 2020-02-18 20:15:44 · 238 阅读 · 0 评论 -
JAVA的private关键字理解
java中关于变量定义前面可以有前缀加以修饰,具体包括:private, public, protected.private修饰的变量只能在其所属的类中被直接访问class A { private int a = 1; public int b = 2;}class B extends A { System.out.println(a); //私有变量,不可以访问 System.o...原创 2019-10-10 14:19:01 · 496 阅读 · 0 评论 -
Java 中的 println() 方法与 toString() 方法
每一个非基本类型的对象都有一个toString()方法,当编译器需要一个String,但是你却只有一个对象的时候,该方法就会被调用。也可以说,Class继承自Object,Object中有一个toString()方法。package Think.Seven;class WaterSource { private String s; WaterSource() { ...原创 2019-09-28 13:58:48 · 1866 阅读 · 0 评论