gpt4 book ai didi

java - 为什么相同的 .class 文件大小不同?

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:16 25 4
gpt4 key购买 nike

我注意到给我的 .class 文件(在构建服务器上用 Ant javac 编译)和 Maven(本地)之间的文件大小存在差异。我查看了类文件的内容并发现了差异,并且我有兴趣了解这些差异的根源。

反编译

给我:

public class TableData
{
public static String[] getTableNames()
{
ArrayList localArrayList = new ArrayList(TableData.Table.values().length);
for (TableData.Table localTable : TableData.Table.values()) {
localArrayList.add(localTable.getName());
}
return (String[])localArrayList.toArray(new String[localArrayList.size()]);
}

本地构建:

public class TableData
{
public static String[] getTableNames()
{
List<String> tableNames = new ArrayList(TableData.Table.values().length);
for (TableData.Table table : TableData.Table.values()) {
tableNames.add(table.getName());
}
return (String[])tableNames.toArray(new String[tableNames.size()]);
}

文件大小

给我:1371 字节

本地构建:1819 字节

使用javap

有很多相似之处,例如:

InnerClasses:
public static final #17= #16 of #14; //Table=class (et cetera)
minor version: 0
major version: 51
flags: ACC_PUBLIC, ACC_SUPER

给我:

#23 = Utf8               Code
#24 = Utf8 LineNumberTable
#25 = Utf8 getTableNames
#26 = Utf8 ()[Ljava/lang/String;

本地构建:

#23 = Utf8               Code
#24 = Utf8 LineNumberTable
#25 = Utf8 LocalVariableTable
#26 = Utf8 this
#27 = Utf8 L.../TableData;
#28 = Utf8 getTableNames
#29 = Utf8 ()[Ljava/lang/String;

编译器调用

给我:

<javac target="1.7"  source="1.7" srcdir="${src.dir}"
excludes="..." destdir="..." classpathref="app.classpath"
verbose="${compile.verbose}" debug="${compile.debug}"
debuglevel="${compile.debuglevel}" includeAntRuntime="true" />


compile.debug: on
compile.debugLevel: lines,source

本地构建:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>

问题:为什么?

最佳答案

来自 Maven 编译器插件的文档:

debug
boolean
Set to true to include debugging information in the compiled class files.
Default value is: true.

更改此配置属性可以消除文件大小的差异:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<debug>false</debug>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>

关于java - 为什么相同的 .class 文件大小不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com