History data for "JDK-8058150: Compile for Specific Platform Version"

Magnus Ihse Bursie magnus.ihse.bursie at oracle.com
Fri Feb 27 13:48:00 UTC 2015

Hi Jan,

On 2015-02-27 09:31, Jan Lahoda wrote:
> Hi,
> I have a question on JDK-8058150: "Compile for Specific Platform 
> Version". To support compilation for older versions of the platform, 
> javac will need some description of the APIs as they existed in the 
> target platforms.
> For this, the current proposal is to use lib/ct.sym file (similar, but 
> different, to the JDK 8 lib/ct.sym), containing classfiles of the 
> older APIs. This file would be constructed at build time from a 
> textual representation of the APIs stored in an OpenJDK repository 
> (currently called ct.sym.txt).
> The current ct.sym.txt is a single file that contains APIs for all 
> supported versions, reusing entries for multiple versions when needed. 
> An alternative would be to use ct7.sym.txt for JDK 7 APIs, ct8.sym.txt 
> for JDK 8 APIs, etc. Using a single file leads to a smaller total size 
> (as it reuses entries where it can), but needs to be considerably 
> changed when a new version is added or an obsolete version is removed.
> The size of the file is considerable: for the "ct.sym.txt" that 
> represents APIs from OpenJDK 7 and 8, the size of the checked-out file 
> in the working copy is (currently[2]) ~23MB, and inside the .hg 
> directory, the file has ~1.7MB (Mercurial is apparently able to 
> compress the ct.sym.txt file very well - but as all history is kept 
> inside .hg directory, the size of the file inside the .hg directory 
> increases when the ct.sym.txt is updated).

In my opinion, the only size that matters here is in the .hg directory. 
If the workspace takes 23 MB more or less is a non-issue when a full 
forest clone is in the gigabyte range. But I don't think 1.7 MB extra 
for the top-level repo is much of a problem either. Since the top-level 
repo currently is so tiny, it will grow noticably in percentage. But 
compare this with hotspot/.hg on 67 MB or jdk/.hg on 351 MB.

If you have a proper text format so future edits can be made as trivial 
diffs, then the mercurial storage will not grow noticable in the future 

> Another alternative would be to partition the file into several 
> smaller files - would be easier to grasp, but if the files would be 
> too small, the compression would be worse (leading to bigger 
> repositories).
What is the actual difference? Having too large files can be burdensome 
on other tools as well, eg. if you open it (mistakenly or not) in a text 
editor. I would tend to prefer several smaller files than one huge.
> Currently, the proposal is to place the ct.sym.txt file into the 
> top-level repository. A prototype of this feature is currently in the 
> jdk9/sandbox forest, on branch JDK-8058150-branch. The current 
> ct.sym.txt file is <top-level-repository>/make/data/symbols/ct.sym.txt.
Sounds like a good place to put such a file. I assume it will be 
processed during building?


More information about the compiler-dev mailing list