Java hello world 确实就要占用 30M

2024-07-17 23:42:48 +08:00
 javak

最近看了几个帖子都是说 java 内存的, 自己也写 java , 还从来没关注过一个 hello world, 今天一时兴起测试了下,确实需要占用 30 。

测试方法和代码如下:

public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("hello memory 02");
        Thread.sleep(60 * 60 * 1000);
    }
}

方式 1: 直接运行 java Main.java 。70M 内存

方式 2: 先编译,再运行: javac Main.java, 然后 java Main. 30M 内存

方式 3 编译成 jar 包在运行,java -jar main.jar 30M 内存。 编译的 maven 配置如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>untitled</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

以上的 java 运行环境:

openjdk version "21.0.3" 2024-04-16 LTS
OpenJDK Runtime Environment Temurin-21.0.3+9 (build 21.0.3+9-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.3+9 (build 21.0.3+9-LTS, mixed mode, sharing)

如果觉得上面哪里测试有问题的,欢迎来拍。

一句话总结:Java 内存没救了,在意内存别用 Java 。

16349 次点击
所在节点    Java
113 条回复
thinkershare
2024-07-18 12:08:47 +08:00
JVM 应该有很大一部分内存是可以和其它进程公用的,也就是你启动多个的时候,JVM 本身的二进制文件在内存中是和运行相同版本的 JVM 的进程共享同一份内存的,排除这部分内存,剩下的应该是 JVM 保留了一部分堆内存用来为接下来的对象分配预留。其实纠结这种问题没啥意义,Java 的使用场景大部分更不不在乎内存效率,开发者的成本远高于硬件的成本。
WIN2333
2024-07-18 13:25:47 +08:00
菜就多练
b1iy
2024-07-18 13:32:27 +08:00
我首次得出这结论的时候刚上大一
emmm 往事不堪回首
daysv
2024-07-18 13:36:15 +08:00
java 这么多年不都这样。 不过居然比 v8 的 node 还多我是惊讶的。
rust 启动
photon006
2024-07-18 13:37:36 +08:00
同时写 nestjs 、java spring 项目,java 确实占内存更多,但现在内存已经白菜价没必要纠结,公司机房服务器升级 256g 根本用不完,项目大了也是分布式架构不存在单机瓶颈。

要相信人比机器贵,花大量时间优化消耗的时间成本还不如直接升级硬件成本低。
R4rvZ6agNVWr56V0
2024-07-18 13:40:23 +08:00
10 几年前写过几种语言与 java pk hello world 的内存文章,没想到还会有人这么干。
daysv
2024-07-18 13:42:13 +08:00
@photon006 说是这么说, 你自己买云服务器玩的时候就又是另外一套说法了。
pcdd
2024-07-18 13:51:50 +08:00
spb3.3.1 、oraclejdk21.0.3 、1 个 @GetMapping helloworld
idea 按钮运行,占用内存 135MB
mvn spring-boot:run 运行,占用内存 350MB
mvn spring-boot:start 运行,占用内存 169MB
topLangyu
2024-07-18 13:52:54 +08:00
大货车确实油耗高。但电动货车局限性也挺多。
loryyang
2024-07-18 13:54:04 +08:00
让我想起,十年前 hadoop 出来的时候,一哥们写文章锐评,单机部署 hadoop 之后,跑里面的排序样例代码太慢了
www5070504
2024-07-18 15:14:36 +08:00
启动内存没啥意义吧 是不是应该关注一些对象的内存使用量 真被说的那些问题 大头肯定不是在启动内存上
Cheivin
2024-07-18 15:29:12 +08:00
@wjx0912 #19 你有这么高速运转的机械进入中国,记住我给出的原理,小的时候。 作者:黑玫瑰 Blake https://www.bilibili.com/read/cv32698756/?jump_opus=1 出处:bilibili
Cheivin
2024-07-18 15:29:50 +08:00
@Cheivin #52 哦豁,忘了删哔站的尾巴了
AV1
2024-07-18 15:58:55 +08:00
谁能想到 java 这个“内存大户”,当初可是设计给嵌入式小型设备用的
slowgen
2024-07-18 16:01:32 +08:00
内存便宜是作为个人设备而言的,到了生产环境内存就很昂贵了,特别是一个业务群一年下来的费用。
大家都说性能瓶颈不在语言而是在数据库层,既然这样,那应用层的配置从 8c 32g 砍到 8c 16g 行不行? 4c 8g 呢? 2c 4g 呢?真正做过资源分配和预算决策就懂了。

https://www.bilibili.com/video/BV1Qe411k7H6 .NET Conf China 2023 的分享,从 Java8 到 .NET8 ,团队升级工作汇报 》可以看下别人的历程,迁移完了服务器资源降低了 3/4 。等自己到了带团队做决策分配预算的位置,就会自然而然做出类似的决定,毕竟省下来的钱自己人分掉不香吗。
displayabc
2024-07-18 16:06:16 +08:00
我的 Windows 电脑,一开机就占用了 8G 内存,我的 debian 服务器才用 500M ,总结一句话:Windows 内存没救了,在意内存的别用 Windows
displayabc
2024-07-18 16:13:33 +08:00
@shuimugan 这种项目,就算重新用 java8 再写一遍,也能降低服务器资源,并不是用.NET8 的原因
zzhaolei
2024-07-18 16:17:03 +08:00
阿里云服务,x86 计算型 c7 ,2c4g ,100mbps ,一年是八万零四百三十二。这只是一台服务器的价格,2c/4g 能支持 Java 用 Spring 流畅的扛住高并发吗?所以内存真的不值钱?

Java 不得上个几十上百台机器?每台一年 8 万块,这得多少钱?所以内存真的不值钱?
tywtyw2002
2024-07-18 16:17:24 +08:00
有没有人出个总结,各种编程语言 helloworld 都占用多少内存? 编译好的文件多大?
jadehare
2024-07-18 16:32:25 +08:00
空载卡车跟汽车跑一米,说卡车油耗高没救了。我可以这么理解么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1058120

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX