文章目录
前言
没啥前言可以说的就是我的个人的杂项笔记,你觉得不好你也打不着我
IDEA:
摘要:
java 中\n\r\t\f的区别
使用IDEA工具连接linux
本笔记专注于java1.8的相关笔记
IDEA快捷键:
删除无用的导包:ctrl+alt+o;
至于为什么不用自动删除无用的包,太**了
配置IDEA中mavn的全局设置:可以在每个项目都设置一下,也可以直接设置所有的项目
每个项目都设置:在设置(按下ctrl+shift+s)中选择 Build,Execution,Deployment =>BulidTools =>Maven => 选择 Maven home directory:以及 user settingss file进行选择。
java 中\n\r\t\f的区别
字符 | 作用 |
---|---|
\n | 换行 |
\r | 回车 |
\t | 制表 |
\f | 换页 |
\n:使光标定位到下一行:
public class Test {
public static void main(String[] args) {
System.out.print("aaaaaaaaaaaaa\nbbbb");
}
}
这个很好理解,故不放置控制台输出
\r回车符,使光标回到当前行的行首,如果回车之前存在内容,则会覆盖掉之前的内容。
public class Test {
public static void main(String[] args) {
System.out.println("hello world\r12345");
}
}
输出结果为:
\t是制表符,相当于tab缩进。它会使得你的输出内容为4的倍数个字符。
例如:“a\t”会在输出a之后再输出三个空格。如果输出的字符串为“aaaa\t”则会在输出4个a之后再输出4个空格。以此类推"aaaaa\t"会在输出5个a之后再输出3个空格。即:你的字符串+\t为你输出的空格=4的倍数个字符。
public class Test {
public static void main(String[] args) {
System.out.println("a\t*");
System.out.println("123412341234");
System.out.println("aaa\t*");
System.out.println("123412341234");
System.out.println("aaaa\t*");
System.out.println("123412341234");
System.out.println("aaaaa\t*");
System.out.println("123412341234");
}
}
输出结果为
\f是换页符,在控制台输出是没有意义的不过可能会输出一些怪怪的符号
public class Test {
public static void main(String[] args) {
System.out.println("aaaa\fbbbb");
}
}
输出结果
使用IDEA工具连接linux
此处完全凭借记忆来写的,有错就有错了反正你也打不着
前提需要安装ssh 如果已安装git且可以成功上传代码到gitee或github可以忽略
随意打开一个IDEA项目之后,找到 TERMINAL 控制台输入
ssh linux用户名@linux的ip地址然后回车即可
例如我的用户为root 我的ip为:192.168.1.1
ssh root@192.168.1.1即可
此时可能会面对上传文件问题:
使用 sftp root@192.168.1.1之后会弹出一个 sftp>
在使用put命令将文件路径+文件名输入到之后即可
IDEA连接数据库
- 讲道理这个跟上面那个应该放在一起,不过不重要
方法一
在view中仔细找找可以找到Database,我的长这样:
然后就好搞了
这里我选择的是mysql
然后去Advanced里找到ServiceTimeZone 大概是这么拼写的反正除了time之外都对给它的值写UTC再连接就可以了
方法二
使用timinal
输入mysql -u用户名 -p密码 回车即可
theif-book-idea
这是一个摸鱼神器,可惜我的编码格式有问题,有时间了可以解决一下。
java垃圾回收机制
摘要:java技术体系中提倡自动内存管理,即给对象分配内存以及回收分配给对象的内存。
![在这里插入图片描述](https://img-blog.csdn.net/20170610165140237?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWlqaXVkdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center#pic_center)想要更好的了解java垃圾回收机制就要对上图进行一定的认识。
一、垃圾回收机制的意义
简单来说就是:解放我们的双手,不需要在编写程序时去考虑内存管理的问题。主要呢,可以分为以下几个主要的问题
哪些内存需要回收?(对象是否可以被回收的两种今典算法:引用计数法和可达性分析算法)
什么时候回收? (堆的新生代、老生代、永久代的垃圾回收时机,MinorGC 和FullGC)
如何回收?(三种经典垃圾回收算法标记清楚算法、复制清楚算法、标记整理算法 以及收集算法和七种垃圾收集器)
在这里,我们需要知道 Stop-the-World ,这个词意味着什么呢?意味着它很牛逼,真的牛逼,一旦它来了,其他所有的线程都得停下来等它办事,它办完了它的事情之后,剩下的你们继续。所以呢,很多情况下GC优化就是指代减少stop-the-world发生的时间,从而使系统具有 高吞吐、低停顿的特点
二、回收
哪些对象需要被回收?
引用计数算法:判断对象的引用数量
引用计数算法是通过判断对象的引用数量来决定对象是否可以被回收。
引用计数算法是垃圾收集器中的早期策略。在这种方法中,堆中的每个对象实例都有一个引用计数。当一个对象被创建时,且将该对象实例分配给一个引用变量,该对象实例的引用计数设置为 1。当任何其它变量被赋值为这个对象的引用时,对象实例的引用计数加 1(a = b,则b引用的对象实例的计数器加 1),但当一个对象实例的某个引用超过了生命周期或者被设置为一个新值时,对象实例的引用计数减 1。特别地,当一个对象实例被垃圾收集时,它引用的任何对象实例的引用计数器均减 1。任何引用计数为0的对象实例可以被当作垃圾收集。
引用计数收集器可以很快的执行,并且交织在程序运行中,对程序需要不被长时间打断的实时环境比较有利,但其很难解决对象之间相互循环引用的问题。如下面的程序和示意图所示,对象objA和objB之间的引用计数永远不可能为 0,那么这两个对象就永远不能被回收。
public class ReferenceCountingGC {
public Object instance = null;
public static void testGC(){
ReferenceCountingGC objA = new ReferenceCountingGC ();
ReferenceCountingGC objB = new ReferenceCountingGC ();
// 对象之间相互循环引用,对象objA和objB之间的引用计数永远不可能为 0
objB.instance = objA;
objA.instance = objB;
objA = null;
objB = null;
System.gc();
}
}
上述代码最后面两句将objA和objB赋值为null,也就是说objA和objB指向的对象已经不可能再被访问,但是由于它们互相引用对方,导致它们的引用计数器都不为 0,那么垃圾收集器就永远不会回收它们。
版权声明:本文为CSDN博主「rocling」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/rocling/article/details/103160099