System.out.println很多人都是处于用的阶段,并没有深入的了解,我也是
之所以来了解这个东西是因为在本地开发的时候启动项目的时候发现内存不足了,这个问题就很纳闷,明明刚刚还是好好的,突然就内存不足了,想到在之前写了几个System.out.println输出,我把这几个System.out.println删除运行就没有这个情况了。
这才让我有了了解System.out.println的想法

System.out.println

分三段system、out、println
system属于Java.lang

out属于system类中的final静态成员,而且out还是java.io.PrintStream类的引用,如下图:

println属于java.io.PrintStream类中的方法

而之所以慢是因为System.out.println是一个同步方法

从源码中看,一上来就用 synchronized 锁起来了,在高并发下性能就大幅度下降。

println 方法调用print和newLine方法


从源码看出,这两个方法也是用synchronized锁起来了

在newLine的方法中textOut.flushBuffer()也是用synchronized锁起来了


而且,如果在这过程中出现IO异常,newLine会中断当前线程。

write方法也是synchronized的


synchronized锁的lock是this获得的

从整个System.out.println的源码可以看出,基本每一个方法都有一个synchronized重量级锁,所以System.out.println在当前这个线程中必须写完才能继续下面的流程,由此可以看出System.out.println对于性能的影响有多大了。

对于System.out.println简单了解相关推荐

  1. Java中System.out.println()简单简介

    System.out.println() 用于打印传递给它的参数. 该声明可以分为三个部分,可以分别理解为: 1.System:这是Java.lang包中定义的最终类 2.out:这是PrintStr ...

  2. java logfaction_Java调试的变迁:从System.out.println到log4j

    jungleford如是说     用惯了VC的人刚接触Java大概很不习惯代码的调试,的确,在M$的大部分IDE都做得相当出色,包括像VJ++这样一直被Java程序员称为是"垃圾" ...

  3. java不要无限循环_java – 看似无限循环终止,除非使用System.out.println

    我有一个简单的代码,应该是一个无限循环,因为x将永远增长,并将始终保持大于j. int x = 5; int y = 9; for (int j = 0; j < x; j++) { x = x ...

  4. java 里面write,java 中 System.out.println()和System.out.write()的区别

    java 中 System.out.println()和System.out.write()的区别. 这两个函数一个是System.out.write()输出字符流,System.out.printl ...

  5. 【Java】System.out.println(Integer.MAX_VALUE+1);背后的二进制故事与启示

    导言 [说明]这里的代码用Java语言描述,工具为Jshell,但原理是通用的. 迷幻语句送上-- System.out.println(Integer.MAX_VALUE+1); 执行结果是什么? ...

  6. Java中的系统类–属性,System.out.println()

    System class in java is one of the core classes and I have never seen any java developer who doesn't ...

  7. System.out::println; 是什么鬼???

    1.第一次见到该表达式的感受 第一次见到该表达式的时候,我还不知道什么是方法引用,当时真是一脸蒙圈,然后问了好多同事,给我的解释也是五花八门,但我还是感觉莫名其妙,有段时间想着就当一个特例记住就好了, ...

  8. System.out::println是用来干嘛的?

    我也不说源码什么的.因为网上太多了.但是没这么让别人通俗易懂.在这里我就通过举例让你知道:: 是干嘛的. 定义一个数组集合 ,先用拉姆达表达式 在forEach中进行遍历. 关于拉姆达表达式,很简单理 ...

  9. Java中如何将System.out.println()内容输入到指定文件

    实现这个问题方法很简单,其实利用了Java io中的PrintStream 打印输出流 现在就举个例子: import java.io.FileNotFoundException; import ja ...

  10. Java中 ”System.out.println()”自带换行

    Java中,System.out.println()竟然自带换行 不想带换行就用System.out.print(); public class ShuZu1 {public static void ...

最新文章

  1. Alpha 冲刺 (8/10)
  2. 【技术干货】如何进行低功耗设计和开发
  3. 移动端HTML5video视频播放优化实践
  4. 如何查看机器是否为vmware虚拟机
  5. 一篇文章教你弄懂SpringMvc中的HttpMessageConverter
  6. Linux自动备份MySQL数据库脚本代码
  7. C#调用带结构体指针的C Dll的方法
  8. Python基础知识:当字典碰到类时会发生什么?
  9. JedisPool.getResource()方法卡死的解决办法
  10. 计算机系统启动的加点顺序是,操作系统引导探究
  11. java面试题汇总(1)
  12. 计算机数据表示实验(HUST) 第2关:汉字机内码获取实验
  13. HTML页面基本结构。
  14. day_7:代理使用
  15. 蔬菜迎八方宾朋,共享科技盛宴
  16. 用html5做一个介绍自己家乡的页面_(近万字)一篇文章带你了解HTML5和CSS3开发基础与应用-适合前端面试必备...
  17. python基础 培训班
  18. 第 254 场力扣周赛(KMP、贪心、快速幂、二分+多源bfs、并查集 + 时光倒流)
  19. Cocos Creator 的组件式编程 以及分工策略 一分钟上手流程
  20. TIA西门子博途下载HMI程序后,画面中文字体显示乱码的处理对策

热门文章

  1. Oracle RAC集群增加新共享硬盘并使用AFD的式增加新ASM磁盘组
  2. 破网与立网,数字螺旋下的适者生存
  3. 操作系统(四)---MS-DOS微软磁盘操作系统
  4. Python处理Excel数据分组
  5. ICM-20602 IMU ACCEL/GYRO/TEMP I2C/SPI LGA
  6. 2022.04.17(LC_6070_计算字符串的数字和)
  7. 你有哪些独到的识人技巧?(转自知乎)
  8. 二进制与base64
  9. dell服务器分区表修复,如何修复被Partition Magic损坏的分区表
  10. HDU-1728-逃离迷宫